链表(创建、插入、删除、输出链表等)

来源:互联网 发布:十字绣diy软件 编辑:程序博客网 时间:2024/06/16 07:08

实现功能,根据提示:
输入1:创建一个新链表;
输入2:插入链表
输入3:删除链表
输入0时:自动退出程序。

#include<stdio.h>#include<stdlib.h>typedef struct Slink    {     long long int data;      struct Slink *next;       }slink;int main()    {    slink *create_link();    void output_slink(slink *head);    slink *insert(slink *head,int i,int x);    slink *delete_link(slink *head,int i);    slink *h;    int a,b;    int t;       do{          printf("\n请选择:");           printf("\n1.建立链表");          printf("\n2.插入链表");          printf("\n3.删除链表");          printf("\0.退出链表");          printf("\n请你选择:(1/2/3/4)");          scanf("%d",&t);          if(t == 1)              {              printf("\nplease input data:\n");  //提示输入链表的数据              h = create_link();              output_slink(h);  //把创建的h链表作为输出的参数              }          else if(t == 2)              {                printf("\n输入插入数据的位置(插入模式如:(a,b)):\n");                scanf("%d,%d",&a,&b);                h=insert(h,a,b);                output_slink(h);              }          else if(t == 3)              {                printf("\n请选择要删除链表的位置(a,b):\n");                scanf("%d",&a);                h=delete_link(h,a);                output_slink(h);              }            }while(t!=0);    }slink *create_link()    //创建链表head    {      slink *head,*s,*rear;      int c;      head  = (slink *)malloc(sizeof(slink));  //生成头结点      rear = head;  //尾指针指向最后一个节点      scanf("%d",&c);      while(c!=0)          {            s = (slink *)malloc(sizeof(slink));  //生成新节点s            s->data = c;            rear->next=s; //s新节点插入到表尾            rear=s; //修改尾指针指向当前的尾结点            scanf("%d",&c);          }      rear->next=NULL;//将最后一个节点的指针域值为空;      return head;    }void output_slink(slink *head)   //输出链表    {      slink *p;      printf("\nnow the linklist is :\n");      p=head->next;   //指针指向链表head的第一个节点      while(p->next!=NULL)          {           printf("%4d",p->data); //依次输出所有节点的信息           p=p->next;     //指针指向下一个节点          }      return;    }slink *insert(slink *head,int i,int x)   //插入节点    {      slink *p,*q,*s;      s=(slink *)malloc(sizeof(slink));  //生成新节点s      s->data = x;   //x存放在s节点中      q=head;p=head->next;   //q指向头节点,p指向第一个节点      while(p->data!= i&&p->next!=NULL)          {            q=p;            p=p->next;          }      s->next = p;      q->next = s;      return head;    }slink *delete_link(slink *head,int i)  //删除节点    {      slink *p,*q;      q=head;p=head->next;      while(p&&(p->data!=i))          {            q=p;            p=p->next;          }    if(p)        {        q->next=p->next;        free(p);        }    else        {          printf("\nnot find!");        }    return head;    }
0 0
原创粉丝点击