c语言第三版双向链表基本操作,C语言实现双向链表的基本操作 - 具备主动性,逆境中成长。 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

C语言实现双向链表的基本操作

上一篇 /

下一篇  2010-11-03 12:32:44

#include

#include

#include

#include

typedef struct _Person

{

char name[10];

char phone[12];

struct _Person* prev;

struct _Person* next;}Person;

//初始化

Person* InitList()

{

Person* temp;

temp = (Person*)malloc(sizeof(Person));

if(temp == NULL)

{

return NULL;

}

temp->prev = temp;

temp->next = temp;

return temp; }

//销毁

void UnitList(Person* list)

{

Person* p1;

Person* p2;

p1 = list->next;

while(p1 != list)

{

p2=p1->next ;

free(p1);

p1 = p2;

}free(list);

}

//查看

Person* GetList(Person* list,int nGet)

{

int i=1;

Person* p1;

if(list == NULL)

{

return NULL;

}

p1 = list->next;

while(p1!=NULL&&i

{

p1 = p1->next;

i++;

}

if(p1 == NULL)

{

return NULL;

}

if(i>nGet)

{

return NULL;

}

return p1;

}

//插入

Person* InsertList(Person* list,int nPos,Person* pInsert){

Person* temp=NULL;

Person* temp2=NULL;

Person* temp3 = NULL;

int i =1;

if(list == NULL)

{

return NULL;

}

//空表,插入第一个元素

if(nPos == 1 && list->next == list && temp!=list)

{

//分配内存并拷贝值

temp = (Person*)malloc(sizeof(Person));

if(temp == NULL)

{

return list;

}

strcpy(temp->name,pInsert->name);

strcpy(temp->phone,pInsert->phone);

//修改表关的直接前驱和后继

list->next = temp;

list->prev = temp;

temp->prev = list;

temp->next = list;

return list;

}

temp = list->next;

//找到插入位置的前一个节点

while(temp != NULL && i

{

temp = temp->next;

i++;

}

if(temp == NULL)

{

return list;

}

if( i < nPos-1)

{

return list;

}

//为新的节点分配空间并赋值

temp2 = (Person*)malloc(sizeof(Person));

if(temp2 == NULL)

{

return list;

}

strcpy(temp2->name,pInsert->name);

strcpy(temp2->phone,pInsert->phone);

//找到当前节点

temp3 = temp->next;

//修改前驱后继关系

temp->next = temp2;

temp2->prev = temp;

temp2->next = temp3;

temp3->prev = temp2;

return list; } Person* DeleteList(Person* list,int nPos)

{

Person* temp1=NULL;

Person* temp2=NULL;

Person* temp3 = NULL;

int i =1;

if(list == NULL)

{

return NULL;

}

temp1 = list->next;

//找到插入位置的前一个节点

while(temp1 != NULL && i

{

temp1 = temp1->next;

i++;

}

if(temp1 == NULL)

{

return list;

}

if( i < nPos-1)

{

return list;

}

temp3 = temp1->next;

temp2 = temp1->prev;

temp2->next=temp3;

temp3->prev=temp2;

free(temp1);

temp1 = NULL;

return list;

}

Person* ModifyList(Person* list,int nPos, Person* pModify)

{

Person* p1=NULL;

int i = 1;

if(list == NULL)

{

return NULL;

}

p1 = list->next ;

while(p1 != NULL && i

{

p1 = p1->next ;

i++;

}

if(p1 == NULL)

{

return list;

}

if(i>nPos)

{

return list;}

strcpy(p1->name ,pModify->name);

strcpy(p1->phone  ,pModify->phone);

list = p1;

return list;} int main()

{

Person newnode;

int i = 0,n,count=0;

Person* head = NULL;

Person* temp = NULL;

Person* Perget= NULL;

Person Modify={"good","123*9"};

head = InitList();

for(i = 1;i<=20;i++)

{

sprintf(newnode.name,"stud%02d",(21-i));

sprintf(newnode.phone,"1234*%04d",(21-i));

InsertList(head,i+1,&newnode);

}

temp = head->next;

if(NULL == temp)

{

return 0;

}

printf("请输入你要删除的条数:");

scanf("%d",&n);

if(n<20&&n>0)

{

DeleteList(head,n);

}

else

{

printf("此数据不存在!\n");

}

printf("\n插入的数据为:\n");

for(i = 1;temp != head;i++)

{

printf("name = %s  phoe = %s\n", temp->name, temp->phone);

count++;

temp = temp->next;  }

printf("\n请输入你要查询的条数:");

scanf("%d",&n);

if(n<20&&n>0)

{

Perget=GetList(temp,n);

if(Perget!=NULL)

{

printf("Look Result: name = %s  phoe = %s\n", Perget->name, Perget->phone);

}

}

else{

printf("此数据不存在!\n");

}

printf("\n请输入你要修改的条数(修改成 %s,%s):",Modify.name ,Modify.phone);

scanf("%d",&n);

if(n<20&&n>0)

{       Perget=ModifyList(temp,n,&Modify);

if(Perget!=NULL)

{

printf("Insert Result: name = %s  phone = %s\n\n", Perget->name, Perget->phone);

}

}

else

{

printf("此数据不存在!\n\n");

}

printf("共输入的条数为:%d\n\n",count);

UnitList(temp);

return 0;  }

TAG:

我来说两句

显示全部

d8a3dac35532145b347031a8fb402eba.gif

4d73fc83cb27b31041650c043e06fdc8.gif

5d06f4dc9b08a7e1fecdedaf9fe87c66.gif

659391f05d11818e0d3bd694a6d99ddc.gif

f27d7d9f67d98cc858fe74ff4d76554e.gif

b0d82b880d66765dd2a1af173b20f406.gif

e87f042c31e114675541bb49e0fbf138.gif

97a372eda248bf63679ecf2d47467589.gif

a14a392968e29ace4cb2ca390d53264e.gif

ff31a40db0d852c3704276b17a1dd158.gif

46298ad80746c3790e9535ce3396efec.gif

ef97f2303f935b723744c0c99db267f8.gif

46add61d58ae5b455d8994b1485357d3.gif

701ffdce43c5ac45c241dba6a7ae431d.gif

4ac0c1a50de5d21a8087006d0295547a.gif

e54bbadbdbb00b0b5cc4182352ca2352.gif

afb655844bdfda4cf47fef6d239f009d.gif

bf5c12b671f1179ba425de53370ebd3d.gif

865ad24093d248b0ec3b85ea66a6aaa7.gif

ab80f8b6419577f8a8ad7bb690794024.gif

内容

昵称

验证

ada834077f6a48ad60a11ec0354fde86.png

提交评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值