#include<stdio.h>
#include<stdlb.h>
typedef struct _node{
int value;
struct _node *next;
}Node;
typedef struct _list{
Node *head;
Node *tail;
}List; //用自己定义的数据结构代表整个链表
void add(List *pList,number) //链表的添加
{
//add to the link-list
Node *p=(Node*)malloc(sizeof(Node));
p->value=number;
p->next=NULL;
if(pList->tail)
{
pList->tail.next=p;
pList->tail=pList->tail->next;
else
{
pList->head=p;
pList->tail=pList->head;
}
}
void find_last(List *pList) //找到链表的最后一个结点
{
Node *last=pList->head;
while(last->next)
{
last=last->next;
}
pList->tail=last;
}
void link_print(List *pList) //遍历
{
Node *p=(Node*)malloc(sizeof(Node));
for(p=pList.head;p;p=p->next);
{
printf("%d\n",p->value);
}
}
void link_find(List *pList,n) //搜索
{
Node *p=(Node*)malloc(sizeof(Node));
int isFound =0;
for(p=pList->head;p;p=p->next);
{
if(p->value==n)
{
isfound=1;
printf("找到了\n");
break;
}
}
if(isFound==0)
{
printf("没找到\n");
}
}
void link_delete(List *pList,n)//链表的删除
{
Node *pre=(Node*)malloc(sizeof(Node));
Node *cur=(Node*)malloc(sizeof(Node));
int isFound =0;
for(pre=NULL,cur=pList->head;cur;pre=cur,cur=cur->next)
{
if(cur->value==n)
{
printf("找到了\n");
isfound=1;
if(pre)
{
pre->next=cur->next;
}
else
{
pList->head=cur->next;
}
free(cur);
break;
}
}
if(isFound==0)
{
printf("没找到\n");
}
}
void link_free(List *pList) //链表的清除
{
Node *pre=(Node*)malloc(sizeof(Node*));
Node *cur=(Node*)malloc(sizeof(Node*));
for(pre=pList->head,cur=NULL;pre; )
{
cur=pre->next;
free(pre);
pre=cur;
}
}
int main()
{
List list;
list.head=NULL;
list.head=NULL; //为了find_last
find_last(&list);
int number=0;
do
{
scanf("\n",&number);
if(number!=-1)
{
add(&list,number);
}
}while(number!=-1)
link_print(&list);
link_find(&list,1);
link_delete(&list,1);
link_free(&list);
return 0;
}
这是在中国大学MOOC浙江大学翁凯老师的C语言程序设计一课中边听边敲的
如您发现错误之处,欢迎并感谢批评指正