数据结构之单链表基本操作

/*
问题总结:链表销毁时出现错误,注意链表销毁操作。
*/
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<time.h>
#define OK 1
#define ERROR 0
typedef struct Node
{
int data;
struct Node *next;
}Node,*Linklist;


Linklist Creat_Linklist(Linklist *L,int n)
{
Linklist p;
int m = 0;
*L = (Linklist)malloc(sizeof(Node));
(*L)->next = NULL;
// p = (*L)->next; 此句多余
srand(time(0));
for(;m<n;++m)
{
p = (Linklist)malloc(sizeof(Node));
p->data = rand()%10+1;
p->next = (*L)->next ;
(*L)->next = p;
}
return *L;
}

int Insert_Node(Linklist *L,int i,int item)
{
int m = 1;
Linklist p,q;
p = *L;
while(p&&m<i)
{
p = p->next;
++m;
}
if(!p||m>i)
return ERROR;
q = (Linklist)malloc(sizeof(Node));
q->data = item;
q->next = p->next;
p->next = q;
return OK;
}

int Delete_Node(Linklist *L,int i)
{
Linklist p,q;
int m = 1;
p = *L;
while(p->next&&m<i)
{
p = p->next;
++m;
}
if(!(p->next)||m>i)
return ERROR;
q= p->next;
p->next = q->next;
return OK;
}
int Trease_Node(Linklist L)
{
Linklist p;
p = L->next ;
while(p)
{
printf("%d\n",p->data);
p = p->next;
}
return OK;
}
int Destroy_Linklist(Linklist *L)
{
Linklist p,q;
p = (*L)->next;

while(p)
{
q = p->next ;
free(p);
p = q;
}
//printf("链表已经销毁完毕\n");
(*L)->next = NULL;
return OK;
}

int main()
{
Linklist L,Head;
Head = Creat_Linklist(&L,5);
Insert_Node(&Head,1,1);
Delete_Node(&Head,1);
Destroy_Linklist(&Head);
Trease_Node(Head);
return 0;
}

posted @ 2018-12-08 18:43  请叫我晓风哥哥  阅读(421)  评论(0编辑  收藏  举报