复习了一下链表的操作顺手写了一个基本功能的链表
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MYDATA int
typedef struct node * Pnode;
typedef struct node{
MYDATA data;
Pnode link;
}Node;
typedef struct node * Linklist;
/*****创建一个空链表***********/
Pnode create_null()
{
Pnode head=(Pnode)malloc(sizeof(struct node));
if(head!=NULL)
head->link=NULL;
else
{
printf("Create faild!!\n");
exit(-1);
}
printf("Head create success!!\n");
return head;
}
/***判定链表是否为空***/
int isNulllist(Linklist l)
{
Pnode p=l;
return(p->link==NULL);
}
/******查找第一个x值并且在之后添加到该值之后*******/
int add_to_x_behind(Linklist l,MYDATA x)
{
Pnode p,q;
p=l;
if(isNulllist(l))
{
printf("It`s NULL !!\n");
return ;
}
else
{
while(p->link!=NULL)
{
p=p->link;
if(p->data==x)
{
q=(Pnode)malloc(sizeof(Pnode));
if(q!=NULL)
{
printf("Please input your data!!\n");
scanf("%d",&q->data);
q->link=p->link;
p->link=q;
printf("%d nsert behind x=%d successful!!\n",q->data,x);
return 0;
}
else
{printf("alloc faild!!\n");exit(-1);}
}
}
if(p->link==NULL)
{
printf("Cant find %d",x);
return -1;
}
}
}/***删除第一个值为x的一个节点**/
int list_dell(Linklist l,MYDATA x)
{
Pnode p,q;
p=l;
if(!isNulllist(p))
{
if(p->link->data==x)
{
q=p->link;
p->link=q->link;
free(q);
}
while(p->link!=NULL)
{
p=p->link;
if(p->link->data==x)
{
q=p->link;
p->link=q->link;
free(q);
printf("Delete %d successfull!!\n",x);
return 0;
}
}
printf("Can`t find this value!!\n");
return -1;
}
printf("Null list !!\n");
return -1;
}
/******添加数据到链表尾部***********/
void list_add_tail(Pnode head)
{
Pnode p,q;
p=head;
q=(Pnode)malloc(sizeof(Node));
if(q!=NULL)
{
q->link=NULL;
while(p->link!=NULL)
p=p->link;
if(p->link==NULL)
{
scanf("%d",&q->data);
p->link=q;
printf("Add successful!!\n");
}
}
else
{
free(q);
printf("Add to tail faild !!\n");
exit(-1);
}
}
void print_list(Linklist head)
{
Pnode p;
p=head;
while(p->link!=NULL)
{
printf("data=%d\n",p->link->data);
p=p->link;
}
}
int main()
{
Pnode list;
list=create_null();
list_add_tail(list);
list_add_tail(list);
list_add_tail(list);
list_add_tail(list);
add_to_x_behind(list,2);
list_dell(list,3);
print_list(list);
return 0;
}