久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2546|回復: 0
打印 上一主題 下一主題
收起左側

原創 控制臺測試鏈表程序-C語言指針練習的好例子

[復制鏈接]
跳轉到指定樓層
樓主


C語言源程序:
  1. /* mcu6666 */
  2. #include "stdio.h"
  3. #include "malloc.h"

  4. typedef struct node {
  5.     int data;
  6.     node* next;
  7. }Node;

  8. typedef struct {
  9.         unsigned char id;
  10.         void(*Func)(Node **head);
  11. }FuncSt;

  12. Node* uartListHead = NULL;

  13. int ListCreat(Node **p_list, int size)
  14. {
  15.     node* p = NULL;
  16.     int i;
  17.     *p_list = (Node*)malloc(sizeof(Node));
  18.     if (*p_list == NULL)
  19.     {
  20.         return 0;
  21.     }
  22.     (*p_list)->next = NULL;
  23.     for (i = size; i > 0; i--)
  24.     {
  25.         p = (Node*)malloc(sizeof(Node));
  26.         if (p == NULL)
  27.         {
  28.             return 0;
  29.         }
  30.         p->data = i;
  31.         p->next =(*p_list)->next;
  32.         (*p_list)->next = p;
  33.     }
  34.     return 1;
  35. }

  36. void ScanPrintList(Node **head)
  37. {
  38.         Node *p;
  39.         Node *q;
  40.         p = (*head)->next;
  41.         printf("\n\n鏈表遍歷結果如下:\n");
  42.         if (p == NULL)
  43.         {
  44.                 printf("空鏈表\n");
  45.         }
  46.         while(p != NULL)
  47.         {
  48.                 printf("%d\t",p->data);
  49.                 q = p->next;
  50.                 p = q;
  51.         }
  52.         printf("\n\n");
  53. }
  54. void ListGetDat(Node **head, int dat)
  55. {
  56.         
  57.         Node* tempPtr = (Node*)malloc(sizeof(Node));
  58.         Node *p = NULL;
  59.         int count = 0;
  60.         int flag = 0;
  61.         if (tempPtr == NULL)
  62.         {
  63.                 return;
  64.         }
  65.         if ((*head)->next == NULL)
  66.         {
  67.                 printf("未查到該元素");
  68.                 return;
  69.         }
  70.         p = *head;
  71.         while(p != NULL)
  72.         {
  73.                 if (p->data == dat)
  74.                 {
  75.                         printf("第%d個元素是%d\n",count,dat);
  76.                         flag = 1;
  77.                 }
  78.                 p = p->next;
  79.                 count++;
  80.         }
  81.         if (flag == 0)
  82.         {
  83.                 printf("未查到該元素\n");
  84.         }
  85. }

  86. void ListRemoveDat(Node **head, int dat)
  87. {
  88.         
  89.         Node *p = NULL;
  90.         Node *q = NULL;
  91.         int count = 0;
  92.         int flag = 0;

  93.         if ((*head)->next == NULL)
  94.         {
  95.                 printf("未查到該元素 無法刪除");
  96.                 return;
  97.         }
  98.         p = *head;
  99.         q = p;
  100.         while(p != NULL)
  101.         {
  102.                 if (p->data == dat)
  103.                 {
  104.                         printf("第%d個元素是%d 已刪除\n",count,dat);
  105.                         flag = 1;
  106.                         q->next = p->next;
  107.                         free(p);
  108.                         p = q;
  109.                 }
  110.                 q = p;
  111.                 p = p->next;
  112.                 count++;
  113.         }
  114.         if (flag == 0)
  115.         {
  116.                 printf("未查到該元素 無法刪除\n");
  117.         }
  118. }
  119. void ListRemoveDatTest(Node **head)
  120. {
  121.     int temp;
  122.         printf("remove input:\n");
  123.         scanf("%d",&temp);
  124.         ListRemoveDat(head, temp);
  125. }

  126. void ListGetDatTest(Node **head)
  127. {
  128.     int temp;
  129.         printf("aim input:\n");
  130.         scanf("%d",&temp);
  131.         ListGetDat(head, temp);
  132. }
  133. void ListTailAdd(Node **head, int dat)
  134. {
  135.         
  136.         Node* tempPtr = (Node*)malloc(sizeof(Node));
  137.         Node *p = NULL;
  138.         if (tempPtr == NULL)
  139.         {
  140.                 return;
  141.         }
  142.         if ((*head)->next == NULL)
  143.         {
  144.                 (*head)->next = tempPtr;
  145.                 tempPtr->data = dat;
  146.                 tempPtr->next = NULL;
  147.                 return;
  148.         }
  149.         p = *head;
  150.         while(p->next != NULL)
  151.         {
  152.                 p = p->next;
  153.         }
  154.         p->next = tempPtr;
  155.         tempPtr->data = dat;
  156.         tempPtr->next = NULL;
  157. }

  158. void TailAddTest(Node **head)
  159. {
  160.         int temp;
  161.         printf("value input:\n");
  162.         scanf("%d",&temp);
  163.         ListTailAdd(head, temp);
  164. }

  165. void ListClean(Node **head)
  166. {
  167.         Node *p = NULL;
  168.         while((*head)->next != NULL)
  169.         {
  170.                 p = (*head)->next;
  171.                 (*head)->next = p->next;
  172.                 free(p);
  173.         }
  174. }

  175. FuncSt g_funcTable[] = {
  176.         {1, ListClean},
  177.         {2, TailAddTest},
  178.         {3,        ListGetDatTest},
  179.         {4,        ScanPrintList},
  180.         {5, ListRemoveDatTest},
  181. };

  182. void FnucHandleTask(unsigned char id)
  183. {
  184.         for (int i = 0; i < (sizeof(g_funcTable) / sizeof(g_funcTable[0])); i++)
  185.         {
  186.                 if (id == g_funcTable[i].id)
  187.                 {
  188.                         g_funcTable[i].Func(&uartListHead);
  189.                         break;
  190.                 }
  191.         }
  192. }
  193. void InitPrnt(void)
  194. {
  195.         printf("1:鏈表清空\t2:尾部添加元素\t3:查找指定元素\t4:遍歷鏈表\t5:刪除指定元素\t6:指定位置數據更改\t\n");        
  196. }
  197. int main()
  198. {
  199.         unsigned char testCategory;
  200.         if (ListCreat(&uartListHead, 10) == 1)
  201.         {
  202.                 printf("list creat succes!\n");
  203.         }
  204.         while(1)
  205.         {
  206.                 InitPrnt();
  207.                 scanf("%d",&testCategory);
  208.                 FnucHandleTask(testCategory);
  209.         }
  210.         return 1;
  211. }
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女亚洲一区 | 日韩一区二区三区在线视频 | 亚洲一区精品视频 | 91视在线国内在线播放酒店 | 成人免费观看视频 | 中文字幕一区在线 | 欧美日韩亚洲在线 | 日韩在线中文字幕 | 日本高清精品 | 国产精品99久久久久久宅男 | 久久久久国产 | 中文字幕在线观看国产 | 成人老司机 | 夜夜爽99久久国产综合精品女不卡 | 国产亚洲一区二区三区在线 | 不卡一二三区 | 男女视频在线观看免费 | 精品福利视频一区二区三区 | 91精品久久久久久久久久入口 | 五月激情婷婷网 | 久久成人综合 | 精品国产乱码久久久久久图片 | 日韩一区二区在线视频 | www.4567| 亚洲视频1区 | 在线观看成人小视频 | 99视频免费看 | 热久久国产| 黄色片视频免费 | 亚洲a一区二区 | 国产福利视频导航 | 欧美一区二区三区久久精品 | 久久不卡 | 国产精品免费福利 | 99久久99久久精品国产片果冰 | 九九久久精品视频 | 日韩高清国产一区在线 | 精品久久香蕉国产线看观看亚洲 | 国产成人免费视频网站高清观看视频 | 视频一区二区三区在线观看 | 国产精品国产精品国产专区不卡 |