//单向链表
#define _CRT_SECURE_NO_WARNINGS_
#include<stdio.h>
#include<math.h>
#define ElemType int
#define temp_ElemType d//这个在使用的时候需要更改
#define ERROR -1
typedef struct po {
ElemType data;
struct po *next;
}Node ;//定义单向链表的结构体
Node* Init_List() {
Node* p = (Node*)malloc(sizeof(Node));
p->next = NULL;//头结点指向null,便于之后的鲁棒性判定
scanf("%temp_ElemType", &p->data);
return p;
}//定义头结点
void Destory_List(Node* p) {
int k = 0;
Node* temp = p;
for (k = 1; temp->next; k++) temp = temp->next;
while (k > 1) {
temp = p;
while (temp->next) temp = temp->next;
free(temp);//进行多次循环,每次循环到最后一个的时候删掉最后一个
k--;
}//删的只剩下节点p的时侯退出
free(p);//删除头结点
}
Node* Clear_List(Node* p) {
int k = 0;
Node* temp = p;
for (k = 1; temp->next; k++) temp = temp->next;
while (k > 1) {
temp = p;
while (temp->next) temp = temp->next;
free(temp);//进行多次循环,每次循环到最后一个的时候删掉最后一个
k--;
}//删的只剩下节点p的时侯退出
p->next = NULL;//初始化头结点的next
}
int List_empty(Node* p) {
if (p->next) return 0;
else return 1;
}//如果非空返回1,反之返回0;
Node* Insert_Node(Node* p, int i) {
Node* q = (Node*)malloc(sizeof(Node));
scanf("%temp_ElemType", q->data);
Node* temp = p;
int k = 0;
for (k = 0; k < i - 1 && temp->next != NULL; k++) temp = temp->next;//这个时候temp指向了插入位置的前一个节点
if (k != i - 2) exit(ERROR);//如果i的位置大于当前链表长度,返回-1,数据非法。
else {
q->next = temp->next;
temp->next = q;
return p;
}
}//只允许在头结点之后插入,插入在特定的位置,返回值为头结点。
Node* Delete_Node(Node* p, int i) {
Node* temp = p;
int k = 0;
for (k = 0; k < i - 1 && temp->next != NULL; k++) temp = temp->next;//这个时候temp指向了插入位置的前一个节点
if (k != i - 2) exit(ERROR);//如果i的位置大于当前链表长度,返回-1,数据非法
else {
temp->next = temp->next->next;
free(temp->next);
return p;
}
}//删除指定位置的数据并释放内存。
ElemType* Get_Elem(Node* p, int i, ElemType* e) {
Node* temp = p;
int k = 0;
for (k = 0; k < i - 1 && temp->next != NULL; k++) temp = temp->next;//这个时候temp指向了插入位置的前一个节点
if (k != i - 2) exit(ERROR);//如果i的位置大于当前链表长度,返回-1,数据非法。
else {
*e = temp->next->data;
return e;
}
}//查询链表的第i个结点的数据。
int main() {
printf("-1");
return 0;
}
单向链表,C语言.cpp文件,需轻度debug
最新推荐文章于 2024-11-14 17:58:10 发布