鱼C论坛

 找回密码
 立即注册
查看: 3476|回复: 1

[技术交流] 今天写了个链表,供c语言初学者学习交流,大神勿喷,嘿嘿

[复制链接]
发表于 2013-12-1 21:35:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct node
  4. {
  5.     int date;
  6.         struct node *next;
  7. }node;

  8. node *creat_list(int n);
  9. int empty_list(node *head);
  10. int treval_list(node *head);
  11. int delete_list(node *head,int i,int n);
  12. int add_list(node *head,int i,int k,int n);

  13. int main()
  14. {
  15.     node *phead = NULL;
  16.         int n,j;
  17.    
  18.         printf("1:创建链表\n");
  19.         printf("2:遍历链表\n");
  20.         printf("3:删除节点\n");
  21.         printf("4:插入节点\n");
  22.         printf("5:退出程序\n");
  23.     printf("请输入您想操作的编号:");

  24.         while(1)
  25.         {
  26.            scanf("%d",&j);
  27.            switch(j)
  28.            {
  29.               case 1:{
  30.                                          printf("请输入您想创建的有效节点的个数:");
  31.                                          scanf("%d",&n);
  32.                                          phead = creat_list(n);
  33.                                          break;              
  34.                                  }
  35.                   case 2:{
  36.                                  if(empty_list(phead))
  37.                                          {
  38.                                              printf("链表为空,遍历失败,请选择您的下一步操作序号:\n");
  39.                                                  break;
  40.                                          }
  41.                                          else
  42.                                          {
  43.                                              treval_list(phead);
  44.                                                  break;
  45.                                          }
  46.                                 
  47.                                  }
  48.                   case 3:{   
  49.                                  int i;
  50.                                          if(empty_list(phead))
  51.                                          {
  52.                                              printf("链表为空,删除节点失败,请选择您的下一步操作序号:\n");
  53.                                                  break;
  54.                                          }
  55.                                          else
  56.                                          {
  57.                                              printf("您想删除第几个节点:");
  58.                                              scanf("%d",&i);
  59.                                          if(!delete_list(phead,i,n))
  60.                                                  {
  61.                                                       printf("删除节点失败,请选择您的下一步操作序号:\n");
  62.                                                  }
  63.                                                  break;
  64.                                          }
  65.                                          
  66.                                  }
  67.                   case 4:{
  68.                                      if(empty_list(phead))
  69.                                          {
  70.                                              printf("链表为空,插入节点失败,请选择您的下一步操作序号:\n");
  71.                                                  break;
  72.                                          }
  73.                                          else
  74.                                          {
  75.                                             int i,k;
  76.                                                 printf("请输入您想插入元素的位置:");
  77.                                                 scanf("%d",&i);
  78.                                                 printf("请输入您想插入的元素的值:");
  79.                         scanf("%d",&k);
  80.                                                 if(!add_list(phead,i,k,n))
  81.                                                 {
  82.                                                     printf("插入节点失败,请选择您的下一步操作序号:\n");
  83.                                                 }
  84.                                                 break;
  85.                                          }
  86.                                  }
  87.                   case 5:{
  88.                                      exit(-1);
  89.                                  }
  90.            }
  91.            printf("请输入您的下一步操作:");   
  92.         }
  93.         return 0;
  94. }

  95. node *creat_list(int n)
  96. {
  97.    int i,k;
  98.    node *head = (node *)malloc(sizeof(node));
  99.    node *phead = head;
  100.    head->next = NULL;

  101.    for(i=1;i<=n;i++)
  102.    {  
  103.       head->next = (node *)malloc(sizeof(node));

  104.           if(!head)
  105.           {
  106.                 printf("创建链表失败,请关闭程序,重新打开");
  107.                 getchar();
  108.             exit(-1);
  109.           }
  110.       scanf("%d",&k);
  111.           head->next->date = k;
  112.           head->next->next = NULL;
  113.       head = head->next;      
  114.    }
  115.    return(phead);
  116. }

  117. int empty_list(node *head)
  118. {
  119.         if(head == NULL)
  120.         {
  121.                 return 1;
  122.         }
  123.         else
  124.         {
  125.             return 0;
  126.         }
  127. }

  128. int treval_list(node *head)
  129. {   
  130.         int i;

  131.     for(i=1;head->next!=NULL;i++)
  132.         {
  133.             printf("%d\t",head->next->date);
  134.             printf("\n");
  135.                 head = head->next;
  136.         }
  137.         return 1;

  138. }

  139. int delete_list(node *head,int i,int n)
  140. {   
  141.     if(i<0||i>n)
  142.         {
  143.           printf("输入节点位置有误\n");
  144.           return 0;
  145.         }
  146.         else
  147.         {
  148.           node *p = NULL;
  149.           int j;

  150.           for(j=1;j<i;j++)
  151.           {
  152.               head = head->next;
  153.           }
  154.       printf("您删除的节点为:%d",head->next->date);
  155.       p = head->next;
  156.       head->next = head->next->next;
  157.       free(p);
  158.       p = NULL;
  159.       printf("\n");
  160.           return 1;
  161.         }
  162. }

  163. int add_list(node *head,int i,int k,int n)
  164. {
  165.     if(i<0||i>n)
  166.         {
  167.           printf("输入节点位置有误\n");
  168.           return 0;
  169.         }
  170.         else
  171.         {
  172.           node *p = NULL;
  173.           int j;
  174.           
  175.           for(j=1;j<i;j++)
  176.           {
  177.               head = head->next;
  178.           }
  179.           p = head;
  180.           head = head->next;
  181.           p->next = (node *)malloc(sizeof(node));
  182.           p->next->next = head;
  183.           p->next->date = k;
  184.           return 1;
  185.         }
  186. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-1 21:36:05 | 显示全部楼层
自己沙发,嘿嘿
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-4 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表