您的位置 首页 百科知识

C语言临福链表操作

C语言临福链表操作

包括链表的创建删除添加和释放操作!!

#includ农e

#include

stru全液翻ctnode*create();

voidprint_list(structnode*head);

structnode*insert_node(structnode*h,intx,inty);

structnode*delete_node(structnode*h,intz满事料汉令读画底);

voidshifang(s离点敌氢测无头际步相tructnode*head);

structnode

{

 chardata;

 structnode*next;

};

voidmain()

{

 structnode*head;

 intx,y,z;

 head=create();

 print_list(李排首式效胡停即帝衣白head);

 printf("\n输入插入结点的位置的值和插入的数值:");

 scanf("%d%d"副国站把完我景护系非,&x,&y);

 h武话居越委呼封队营ead=insert_node每几无达世时(head,x,y);

 pri财朝nt_list(head);

 printf("\n输入万妒打甲技频是英黑乎要删除的结点:");

 scanf("%d",&z);

 head=delete_node(head,z);

 print_list(head);

 printf("\n释放链表.\n");

}

structnode*create()                                                //建立链表函数

{

 printf("请输入各节点(以-1结尾):\n");

 intx;

 //定义指针*head,*tail,*s;

 structnode*head,*tail,*s;

 //head和tail烈演讨初始化,生成一个头结点

 head=tail=(structnode*)malloc(sizeof(structnode));

 //在循环委害第滑岁你中,生成新结点、赋值、连接、尾指针后移

 scanf("%d国序物",&x);

 while(x!=-1)

 {

  s=(structnode*)malloc(sizeof(structnode));

  s->d蛋ata=x;

  tail->next=s;

  tail=s;

  scanf(较员"%d",&x);

 }

 //尾结点的指针域赋NULL

 tail->next=NULL;

 returnhead;

}

voidprint_list(structnode*head)                                   //输出链表函数

{

 //定义工作指针*p并赋初值p=head->next;即指向第一个结点

 structn掉右渐封听站ode*p;

 p=head->next;

 //判断链表是否为空,空:输出空表的信息,否则:输出所有结点

 if(p==NULL)

  printf("ThelistisNULL.");

 else

  //在循环中输出当前结点,工作指针后移

 {

  printf("head->");

  while(p!=NULL)

  {

   printf("%d->",p->data);

   p=p->next;

  }

  printf("end.");

 }

}

structnode*insert_node(structnode*h,intx,inty)                  //添加结点函数

{

 structnode*p,*q,*s;

 //生成要插入的新结点

 s=(structnode*)malloc(sizeof(structnode));

 s->data=y;

 q=h;

 p=h->next;

 //查找要插入结点的位置

 while((p!=NULL)&&(p->data!=x))

 {

  q=p;

  p=p->next;

 }

 //插入结点

 q->next=s;s->next=p;

 return(h);

}

structnode*delete_node(structnode*h,intz)                            //删除结点函数

{

 structnode*p,*q;

 q=h;

 p=h->next;

  //查找要删除结点的位置

 if(p!=NULL)

 {

  while((p!=NULL)&&(p->data!=z))

  {

   q=p;

   p=p->next;

  }

  //释放结点

  if(p->data==z)

  {

   q->next=p->next;

   free(p);

  }

 }

 return(h);

}

voidshifang(structnode*head)                                              //释放链表函数

{

 structnode*p;

 //逐个释放结点

 while(head!=NULL)

 {

  p=head;

  head=head->next;

  free(p);

 }

}

上一篇 二手名表去哪里卖?
下一篇 古埃及的后对粉文明
扫一扫,手机访问

扫一扫,手机浏览