链表的构造、清空、销毁、删除和插入

链表的构造、清空、销毁、删除和插入

include

include

include

include

define ERROR - 2

define OK 1

define OVERFLOW - 1

define LIST_INIT_SIZE 100

define LISTINCREASE 10

//链表的实现

typedef struct LNode

{

int data;

struct LNode *next;

}LNode, *LinkList;

//构造一个链表

int InitList(LinkList L)//用指向指针的形参,可以解决局部变量未初始化的问题,但不知道为什么可以解决(参数有个星号,但是显示不出来)

{

L = (LNode)malloc(sizeof(LNode));//L前面有个星号,第一个LNode后面要加一个星号

if (!(L)) exit(OVERFLOW);//L前面有个星号,在括号里面

(*L)->next = NULL;//建立了头结点

return OK;

}

//用头插法插入数据

void HeadInsert(LinkList L)

{

int num;

while (scanf_s("%d", &num) != EOF)

{

LNode temp;

temp = (LNode)malloc(sizeof(LNode));

if (!temp) exit(OVERFLOW);

temp->data = num;

temp->next = L->next;

L->next = temp;

}

}

//用尾插法插入数据

//void RearInsert(LinkList *L)

//{

// int num;

// LNode rear = (L);

// while (scanf_s("%d", &num) != EOF)

// {

// LNode temp;

// temp = (LNode)malloc(sizeof(LNode));

// temp->data = num;

// temp->next = NULL;

// rear->next = temp;

// rear = temp;

// }

//}

void RearInsert(LinkList L)//用的一级指针,和用二级指针的运行结果一样(不明白为什么?)

{

int num;

LNode *rear = L;

while (scanf_s("%d", &num) != EOF)

{

LNode temp;

temp = (LNode)malloc(sizeof(LNode));

if (!temp) exit(OVERFLOW);

temp->data = num;

temp->next = NULL;

rear->next = temp;

rear = temp;

}

}

//输出链表中的所有元素

void PrintList(LinkList L)

{

LNode *temp = L->next;

int j = 0;

while (temp)

{

if (j == 0) printf("%d", temp->data);

else printf(" %d", temp->data);

temp = temp->next;

j++;

}

}

//链表任意位置的插入

int ListInsert(LinkList L, int i, int e)//插入在链表的第i个位置

{

int num = 0;//计数器

LNode *temp = L;

while (temp && (num < i - 1))//插入时要找第i个元素之前的一个元素

{

temp = temp->next;

num++;

}

if (!temp || num > i - 1)// i < 1或者 i大于链表长度加1

return ERROR;

LNode temp1;

temp1 = (LNode)malloc(sizeof(LNode));

temp1->data = e;

temp1->next = temp->next;

temp->next = temp1;

return OK;

}

//链表元素的删除

int ListDelet(LinkList L, int i)

{

if (L->next == NULL) return ERROR;//要删除元素之前要先检查是否有元素可删

int num = 0;//计数器

LNode *temp = L;

while (!temp && (num < i - 1))

{

temp = temp->next;

temp++;

}

if ((!temp->next) || (num > i - 1)) return ERROR;

LNode *temp1;

temp1 = temp->next;

temp->next = temp->next->next;

free(temp1);

return OK;

}

//链表的清空

void ClearList(LinkList L)//头结点保存,其他结点释放

{

LNode *temp = L->next;

while (temp)

{

LNode *temp1 = temp->next;

free(temp);

temp = temp1;

}

}

//链表的销毁

void DestroyList(LinkList L)

{

LNode *temp = L;

while (L)

{

L = L->next;

free(temp);

temp = L;

}

}

int main()

{

LinkList p;

InitList(&p);

//HeadInsert(p);

RearInsert(p);

ListInsert(p, 2, 10);

ListDelet(p, 1);

PrintList(p);

ClearList(p);

printf("销毁完毕\n");

}

相关风暴

拼多多店铺降权店是不是废了?隐形降权多久恢复?
365完美体育官网

拼多多店铺降权店是不是废了?隐形降权多久恢复?

🌀 10-22 🌊 阅读 7709
大巴车的保险保多少
365手机版

大巴车的保险保多少

🌀 12-23 🌊 阅读 8120
免費AI換衣神器:線上為照片換裝
365完美体育官网

免費AI換衣神器:線上為照片換裝

🌀 07-07 🌊 阅读 2937