单链表是方向单一的链表,即就是只能从前向后访问,不能从后向前访问。这篇文章,我

将整理出单链表的一些基本功能。

1.尾插 2.尾删 3.头插 4.头删5.打印 6.插入7.删除指定元素 8.删除指定元素的全部9.删除指

定位置的元素10.排序(此文先给出基本的冒泡排序,其他排序算法之后再给出)

下边,我就这些功能一个一个进行说明,尽量配图~~(这里的单链表不带头结点)

为了方便大家读以下的代码,我给出结构体的定义。

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. typedef struct LinkNode  
  2. {  
  3.     DataType data;  
  4.     struct LinkNode *next;  
  5. }LinkNode,*pLinkNode;  
  6. typedef struct LinkList  
  7. {  
  8.     LinkNode *pHead;  
  9. }LinkList,*pLinkList;  


1.尾插:先要找到链表的尾部,然后进行插入。

单链表的基本实现

具体实现代码如下:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void PushBackLinkList(pLinkList pList, DataType x)  
  2. {  
  3.     assert(pList);  
  4.     pLinkNode  add = CreatNode(x);  
  5.     pLinkNode tmp = pList->pHead;  
  6.     if (NULL == pList->pHead)//linklist is empty  
  7.     {  
  8.         pList->pHead = add;  
  9.         add->next = NULL;  
  10.         return;  
  11.     }  
  12.     while (tmp->next)//linklist is not empty  
  13.     {  
  14.         tmp = tmp->next;  
  15.     }  
  16.     tmp->next = add;  
  17.     add->next = NULL;  
  18.     printf("successful  push back\n");  
  19. }  


2.尾删:顾名思义,找到链表的结尾,将其删除。看图:

单链表的基本实现

下边给出代码实现:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void PopBackLinkList(pLinkList pList)  
  2. {  
  3.     assert(pList);  
  4.     if (NULL == pList->pHead)  
  5.     {  
  6.         printf("linklist is empty.\n");  
  7.         return;  
  8.     }  
  9.     pLinkNode cur = pList->pHead;  
  10.     pLinkNode prev = pList->pHead;  
  11.     if (NULL == cur->next->next)//linklist only has an element.  
  12.     {  
  13.         free(cur->next);  
  14.         cur->next = NULL;  
  15.     }  
  16.     else  
  17.     {  
  18.         while (cur->next)  
  19.         {  
  20.             prev = cur;  
  21.             cur = cur->next;  
  22.         }  
  23.         free(prev ->next);  
  24.         prev->next = NULL;  
  25.     }  
  26.     printf("successful popback");  
  27. }  


3.头插:

如果链表是空链表,直接插入就可;有一个元素和有多个元素一样处理。下边图解:

单链表的基本实现

下边给出代码实现:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void PushFrontLinkList(pLinkList pList, DataType x)  
  2. {  
  3.     assert(pList);  
  4.     pLinkNode  add = CreatNode(x);  
  5.     pLinkNode tmp = pList->pHead;  
  6.     if (NULL == pList->pHead)//linklist is empty  
  7.     {  
  8.         pList->pHead = add;  
  9.         add->next = NULL;  
  10.         return;  
  11.     }  
  12.     add->next = tmp;  
  13.     pList->pHead = add;  
  14.     printf("successful pushfront.\n");  
  15. }  


4.头删:

如果链表是空,不删除;如果是一个结点,删除后将头指针置为NULL;如果是多个结

点,调整指针就好。图解:

单链表的基本实现

下边给出代码实现:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void PopFrontLinkList(pLinkList pList)  
  2. {  
  3.     assert(pList);  
  4.     if (NULL == pList->pHead)  
  5.     {  
  6.         printf("linklist is empty.\n");  
  7.         return;  
  8.     }  
  9.     pLinkNode tmp = pList->pHead;  
  10.     pLinkNode del = pList->pHead;  
  11.     if (NULL == tmp->next->next)  
  12.     {  
  13.         free(tmp->next);  
  14.         pList->pHead = NULL;  
  15.     }  
  16.     else  
  17.     {  
  18.         del = tmp->next;  
  19.         tmp = tmp->next->next;  
  20.         free(del);  
  21.     }  
  22.     printf("successful popfront.\n");  
  23. }  


5.打印:这个比较简单。

6.指定位置之前插入指定元素:这个我们需要有个find函数来查找指定位置的指针

我们约定:如果是空链表,直接将元素插在链表中。

单链表的基本实现

下边给出代码:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void InsertLinkList(pLinkList pList, DataType x, pLinkNode pos)//insert the front of pos  
  2. {  
  3.     assert(pList);  
  4.     pLinkNode p = CreatNode(x);  
  5.     pLinkNode tmp = pList->pHead;  
  6.     if (NULL == pList->pHead)//check:if linklist is empty,we insert the element in the linklist.  
  7.     {  
  8.         tmp->next = p;  
  9.         p->next = NULL;  
  10.         return;  
  11.     }  
  12.     if (pos == pList->pHead->next)  
  13.     {  
  14.         PushFrontLinkList(pList, x);  
  15.         return;  
  16.     }  
  17.     while (tmp->next  != pos)  
  18.     {  
  19.         tmp = tmp->next;  
  20.     }  
  21.     p->next = tmp->next;  
  22.     tmp->next = p;  
  23.     printf("successful insertion.\n");  
  24. }  


7.删除指定元素:

如果链表是空,直接返回;如果链表只有一个元素,如果第一个元素就是指定元素,删

除,然后返回;如果多个元素,找到元素直接删除。

单链表的基本实现

代码:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void Remove(pLinkList pList, DataType x)  
  2. {  
  3.     assert(pList);  
  4.     pLinkNode cur = pList->pHead;  
  5.     pLinkNode del = pList->pHead;  
  6.     pLinkNode prev = pList->pHead;  
  7.     if (NULL == pList->pHead)  
  8.     {  
  9.         printf("linklist is empty.\n");  
  10.         return;  
  11.     }  
  12.     if (cur->next == NULL)//只有一个元素  
  13.     {  
  14.         if (cur->data == x)  
  15.         {  
  16.             free(cur->next);  
  17.             pList->pHead = NULL;  
  18.             return;  
  19.         }  
  20.     }  
  21.     else  
  22.     {  
  23.         while (cur != NULL)  
  24.         {  
  25.             if (cur->data == x)  
  26.             {  
  27.                 del = cur;  
  28.                 pList->pHead = cur->next;  
  29.                 free(del);  
  30.                 return;  
  31.             }  
  32.             cur = cur->next;  
  33.             while (cur != NULL)  
  34.             {  
  35.                 if (cur->data == x)  
  36.                 {  
  37.                     prev->next = cur->next;  
  38.                     free(cur);  
  39.                     return;  
  40.                 }  
  41.                 prev = cur;  
  42.                 cur = cur->next;  
  43.             }  
  44.         }  
  45.     }  
  46.     printf("successful remove.\n");  
  47. }  


8.删除指定元素的全部:

给定元素x,删除链表中所有data为x的元素。如果是空链表,直接返回。先判断链表的

第一个元素。

单链表的基本实现

给出代码:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void RemoveAll(pLinkList pList, DataType x)  
  2. {  
  3.     assert(pList);  
  4.     if (NULL == pList->pHead)  
  5.     {  
  6.         printf("linklist is empty.\n");  
  7.         return;  
  8.     }  
  9.     pLinkNode cur = pList->pHead;  
  10.     pLinkNode prev = pList->pHead;  
  11.       
  12.     while (cur != NULL)      //判断第一个结点  
  13.     {  
  14.         if (cur->next == NULL)    //linklist has one element.  
  15.         {  
  16.             if (cur->data == x)  
  17.             {  
  18.                 free(cur->next);  
  19.                 pList->pHead = NULL;  
  20.                 return;  
  21.             }  
  22.         }  
  23.         else if (pList->pHead->data == x) //如果不是一个结点,且第一个结点的数据是x         
  24.         {  
  25.             pList->pHead = cur->next;  
  26.             free(cur);  
  27.             cur = pList->pHead;  
  28.         }  
  29.         else  
  30.             break;  
  31.     }  
  32.     cur = cur->next;  
  33.     prev = pList->pHead;  
  34.     while (cur)  
  35.     {  
  36.         if (cur->data == x)  
  37.         {  
  38.             prev->next = cur->next;             
  39.             free(cur);  
  40.             cur = prev;  
  41.         }  
  42.         prev = cur;  
  43.         cur = cur->next;  
  44.     }  
  45.     printf("successful removeall.\n");  
  46. }  


9.删除指定位置的元素:

如果链表是空,直接返回;如果只有一个元素,如果这个元素就是pos位置,删除,返

回;如果多个元素,同样先判断第一个位置,如果是,直接删除,返回,如果不是,继

续向后找。

单链表的基本实现

代码:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void Erase(pLinkList pList, pLinkNode pos)  
  2. {  
  3.     assert(pList);  
  4.     if (NULL == pList->pHead)  
  5.     {  
  6.         printf("linklist is empty.\n");  
  7.         return;  
  8.     }  
  9.     pLinkNode cur = pList->pHead;  
  10.     pLinkNode del = pList->pHead;  
  11.     pLinkNode prev = pList->pHead;  
  12.     if (cur->next == NULL)//如果只有一个元素  
  13.     {  
  14.         if (pos == cur)  
  15.         {                       //第一个结点就是pos位置  
  16.             free(pList->pHead);  
  17.             pList->pHead = NULL;  
  18.         }  
  19.         return;  
  20.     }  
  21.     if (pos == cur)  
  22.     {                       //第一个结点就是pos位置  
  23.         del = cur;  
  24.         pList->pHead = cur->next;  
  25.         free(del);  
  26.         return;  
  27.     }  
  28.     cur = cur->next;  
  29.     while(cur)  
  30.     {   
  31.         if(cur == pos)  
  32.         {  
  33.             prev->next = cur->next;  
  34.             free(cur);  
  35.             return;  
  36.         }  
  37.         prev = cur;  
  38.         cur = cur->next;  
  39.     }  
  40. }  


10.冒泡排序:


单链表的基本实现

给出代码:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. void BottleSort(pLinkList pList)  
  2. {  
  3.     assert(pList);  
  4.     if (NULL == pList->pHead || NULL == pList -> pHead->next )  
  5.     {  
  6.         printf("linklist is empty or linklist has one element.\n");  
  7.         return;  
  8.     }  
  9.     pLinkNode front = pList->pHead;  
  10.     pLinkNode tail = NULL;  
  11.     while (front != tail)  
  12.     {  
  13.         while (front->next != tail)  
  14.         {  
  15.             if (front->data > front->next->data)  
  16.             {  
  17.                 DataType tmp = front->data;  
  18.                 front->data = front->next->data;  
  19.                 front->next->data = tmp;  
  20.             }  
  21.             front = front->next;  
  22.         }  
  23.         tail = front;  
  24.         front = pList->pHead;  
  25.     }  
  26. }  


为了方便读者理解,下边给出程序源码:

[cpp] view plain copy
 单链表的基本实现单链表的基本实现
  1. //LinkList.h  
  2. #ifndef __LINKLIST_H__  
  3. #define __LINKLIST_H__  
  4. #define _CRT_SECURE_NO_WARNINGS 1  
  5. #include<stdio.h>  
  6. #include <assert.h>  
  7. #include<stdlib.h>  
  8. typedef int DataType;  
  9. enum OP  
  10. {  
  11.     EXIT,  
  12.     PUSHBACK,  
  13.     POPBACK,  
  14.     PUSHFRONT,  
  15.     POPFRONT,  
  16.     PRINT,  
  17.     INSERT,  
  18.     REMOVE,  
  19.     REMOVEALL,  
  20.     ERASE,  
  21.     SORT  
  22. };  
  23. typedef struct LinkNode  
  24. {  
  25.     DataType data;  
  26.     struct LinkNode *next;  
  27. }LinkNode,*pLinkNode;  
  28. typedef struct LinkList  
  29. {  
  30.     LinkNode *pHead;  
  31. }LinkList,*pLinkList;  
  32. void InitLinkList(pLinkList pList);  
  33. void DestroyLinkList(pLinkList pList);  
  34. void PushBackLinkList(pLinkList pList,DataType x);  
  35. void PopBackLinkList(pLinkList pList);  
  36. void PushFrontLinkList(pLinkList pList, DataType x);  
  37. void PopFrontLinkList(pLinkList pList);  
  38. void PrintLinkList(pLinkList pList);  
  39. void InsertLinkList(pLinkList pList, DataType x, pLinkNode pos);  
  40. void Remove(pLinkList pList, DataType x);  
  41. void RemoveAll(pLinkList pList, DataType x);  
  42. void Erase(pLinkList pList, pLinkNode pos);  
  43. void BottleSort(pLinkList pList);  
  44. void menu();  
  45. #endif//__LINKLIST_H__  
  46.   
  47.   
  48. //LinkList.c  
  49. #include"LinkList.h"  
  50. pLinkNode CreatNode(DataType x)  
  51. {  
  52.     pLinkNode p = (pLinkNode)malloc(sizeof(LinkNode));  
  53.     if (NULL == p)  
  54.     {  
  55.         printf("out of memory.\n");  
  56.         exit(EXIT_FAILURE);  
  57.     }  
  58.     p->data = x;  
  59.     return p;  
  60. }  
  61. pLinkNode find(pLinkList pList,DataType x)  
  62. {  
  63.     assert(pList);  
  64.     pLinkNode tmp = pList->pHead;  
  65.     if (pList->pHead == NULL)  
  66.     {  
  67.         printf("pList is empty.\n");  
  68.     }  
  69.     while (tmp->data != x)  
  70.     {  
  71.         tmp = tmp->next;  
  72.     }  
  73.     return tmp;  
  74. }  
  75. void InitLinkList(pLinkList pList)  
  76. {  
  77.     assert(pList);  
  78.     pList ->pHead = NULL;  
  79. }  
  80. void DestroyLinkList(pLinkList pList)  
  81. {  
  82.     assert(pList);  
  83.     pLinkNode p = pList->pHead;  
  84.     pLinkNode del = NULL;  
  85.     if (NULL == pList->pHead)  
  86.     {  
  87.         printf("linklist is empty.\n");  
  88.         return;  
  89.     }  
  90.     while (p)  
  91.     {  
  92.         pList->pHead = p->next;  
  93.         free(p);  
  94.         p = pList->pHead;  
  95.     }  
  96.     pList->pHead = NULL;  
  97. }  
  98. void PushBackLinkList(pLinkList pList, DataType x)  
  99. {  
  100.     assert(pList);  
  101.     pLinkNode  add = CreatNode(x);  
  102.     pLinkNode tmp = pList->pHead;  
  103.     if (NULL == pList->pHead)//linklist is empty  
  104.     {  
  105.         pList->pHead = add;  
  106.         add->next = NULL;  
  107.         return;  
  108.     }  
  109.     while (tmp->next)//linklist is not empty  
  110.     {  
  111.         tmp = tmp->next;  
  112.     }  
  113.     tmp->next = add;  
  114.     add->next = NULL;  
  115.     printf("successful  push back\n");  
  116. }  
  117. void PopBackLinkList(pLinkList pList)  
  118. {  
  119.     assert(pList);  
  120.     if (NULL == pList->pHead)  
  121.     {  
  122.         printf("linklist is empty.\n");  
  123.         return;  
  124.     }  
  125.     pLinkNode cur = pList->pHead;  
  126.     pLinkNode prev = pList->pHead;  
  127.     if (NULL == cur->next->next)//linklist only has an element.  
  128.     {  
  129.         free(cur->next);  
  130.         cur->next = NULL;  
  131.     }  
  132.     else  
  133.     {  
  134.         while (cur->next)  
  135.         {  
  136.             prev = cur;  
  137.             cur = cur->next;  
  138.         }  
  139.         free(prev ->next);  
  140.         prev->next = NULL;  
  141.     }  
  142.     printf("successful popback");  
  143. }  
  144. void PushFrontLinkList(pLinkList pList, DataType x)  
  145. {  
  146.     assert(pList);  
  147.     pLinkNode  add = CreatNode(x);  
  148.     pLinkNode tmp = pList->pHead;  
  149.     if (NULL == pList->pHead)//linklist is empty  
  150.     {  
  151.         pList->pHead = add;  
  152.         add->next = NULL;  
  153.         return;  
  154.     }  
  155.     add->next = tmp;  
  156.     pList->pHead = add;  
  157.     printf("successful pushfront.\n");  
  158. }  
  159. void PopFrontLinkList(pLinkList pList)  
  160. {  
  161.     assert(pList);  
  162.     if (NULL == pList->pHead)  
  163.     {  
  164.         printf("linklist is empty.\n");  
  165.         return;  
  166.     }  
  167.     pLinkNode tmp = pList->pHead;  
  168.     pLinkNode del = pList->pHead;  
  169.     if (NULL == tmp->next->next)  
  170.     {  
  171.         free(tmp->next);  
  172.         pList->pHead = NULL;  
  173.     }  
  174.     else  
  175.     {  
  176.         del = tmp->next;  
  177.         tmp = tmp->next->next;  
  178.         free(del);  
  179.     }  
  180.     printf("successful popfront.\n");  
  181. }  
  182. void PrintLinkList(pLinkList pList)  
  183. {  
  184.     assert(pList);  
  185.     if (NULL == pList->pHead)  
  186.     {  
  187.         printf("linklist is empty.\n");  
  188.         return;  
  189.     }  
  190.     pLinkNode tmp = pList->pHead;  
  191.     while (tmp)  
  192.     {  
  193.         printf("%d->",tmp->data);  
  194.         tmp = tmp->next;  
  195.     }  
  196.     printf("over\n");  
  197. }  
  198. void InsertLinkList(pLinkList pList, DataType x, pLinkNode pos)//insert the front of pos  
  199. {  
  200.     assert(pList);  
  201.     pLinkNode p = CreatNode(x);  
  202.     pLinkNode tmp = pList->pHead;  
  203.     if (NULL == pList->pHead)//check:if linklist is empty,we insert the element in the linklist.  
  204.     {  
  205.         tmp->next = p;  
  206.         p->next = NULL;  
  207.         return;  
  208.     }  
  209.     if (pos == pList->pHead->next)  
  210.     {  
  211.         PushFrontLinkList(pList, x);  
  212.         return;  
  213.     }  
  214.     while (tmp->next  != pos)  
  215.     {  
  216.         tmp = tmp->next;  
  217.     }  
  218.     p->next = tmp->next;  
  219.     tmp->next = p;  
  220.     printf("successful insertion.\n");  
  221. }  
  222. void Remove(pLinkList pList, DataType x)  
  223. {  
  224.     assert(pList);  
  225.     pLinkNode cur = pList->pHead;  
  226.     pLinkNode del = pList->pHead;  
  227.     pLinkNode prev = pList->pHead;  
  228.     if (NULL == pList->pHead)  
  229.     {  
  230.         printf("linklist is empty.\n");  
  231.         return;  
  232.     }  
  233.     if (cur->next == NULL)//只有一个元素  
  234.     {  
  235.         if (cur->data == x)  
  236.         {  
  237.             free(cur->next);  
  238.             pList->pHead = NULL;  
  239.             return;  
  240.         }  
  241.     }  
  242.     else  
  243.     {  
  244.         while (cur != NULL)  
  245.         {  
  246.             if (cur->data == x)  
  247.             {  
  248.                 del = cur;  
  249.                 pList->pHead = cur->next;  
  250.                 free(del);  
  251.                 return;  
  252.             }  
  253.             cur = cur->next;  
  254.             while (cur != NULL)  
  255.             {  
  256.                 if (cur->data == x)  
  257.                 {  
  258.                     prev->next = cur->next;  
  259.                     free(cur);  
  260.                     return;  
  261.                 }  
  262.                 prev = cur;  
  263.                 cur = cur->next;  
  264.             }  
  265.         }  
  266.     }  
  267.     printf("successful remove.\n");  
  268. }  
  269. void RemoveAll(pLinkList pList, DataType x)  
  270. {  
  271.     assert(pList);  
  272.     if (NULL == pList->pHead)  
  273.     {  
  274.         printf("linklist is empty.\n");  
  275.         return;  
  276.     }  
  277.     pLinkNode cur = pList->pHead;  
  278.     pLinkNode prev = pList->pHead;  
  279.       
  280.     while (cur != NULL)      //判断第一个结点  
  281.     {  
  282.         if (cur->next == NULL)    //linklist has one element.  
  283.         {  
  284.             if (cur->data == x)  
  285.             {  
  286.                 free(cur->next);  
  287.                 pList->pHead = NULL;  
  288.                 return;  
  289.             }  
  290.         }  
  291.         else if (pList->pHead->data == x) //如果不是一个结点,且第一个结点的数据是x         
  292.         {  
  293.             pList->pHead = cur->next;  
  294.             free(cur);  
  295.             cur = pList->pHead;  
  296.         }  
  297.         else  
  298.             break;  
  299.     }  
  300.     cur = cur->next;  
  301.     prev = pList->pHead;  
  302.     while (cur)  
  303.     {  
  304.         if (cur->data == x)  
  305.         {  
  306.             prev->next = cur->next;             
  307.             free(cur);  
  308.             cur = prev;  
  309.         }  
  310.         prev = cur;  
  311.         cur = cur->next;  
  312.     }  
  313.     printf("successful removeall.\n");  
  314. }  
  315.   
  316. void Erase(pLinkList pList, pLinkNode pos)  
  317. {  
  318.     assert(pList);  
  319.     if (NULL == pList->pHead)  
  320.     {  
  321.         printf("linklist is empty.\n");  
  322.         return;  
  323.     }  
  324.     pLinkNode cur = pList->pHead;  
  325.     pLinkNode del = pList->pHead;  
  326.     pLinkNode prev = pList->pHead;  
  327.     if (cur->next == NULL)//如果只有一个元素  
  328.     {  
  329.         if (pos == cur)  
  330.         {                       //第一个结点就是pos位置  
  331.             free(pList->pHead);  
  332.             pList->pHead = NULL;  
  333.         }  
  334.         return;  
  335.     }  
  336.     if (pos == cur)  
  337.     {                       //第一个结点就是pos位置  
  338.         del = cur;  
  339.         pList->pHead = cur->next;  
  340.         free(del);  
  341.         return;  
  342.     }  
  343.     cur = cur->next;  
  344.     while(cur)  
  345.     {   
  346.         if(cur == pos)  
  347.         {  
  348.             prev->next = cur->next;  
  349.             free(cur);  
  350.             return;  
  351.         }  
  352.         prev = cur;  
  353.         cur = cur->next;  
  354.     }  
  355. }  
  356. void BottleSort(pLinkList pList)  
  357. {  
  358.     assert(pList);  
  359.     if (NULL == pList->pHead || NULL == pList -> pHead->next )  
  360.     {  
  361.         printf("linklist is empty or linklist has one element.\n");  
  362.         return;  
  363.     }  
  364.     pLinkNode front = pList->pHead;  
  365.     pLinkNode tail = NULL;  
  366.     while (front != tail)  
  367.     {  
  368.         while (front->next != tail)  
  369.         {  
  370.             if (front->data > front->next->data)  
  371.             {  
  372.                 DataType tmp = front->data;  
  373.                 front->data = front->next->data;  
  374.                 front->next->data = tmp;  
  375.             }  
  376.             front = front->next;  
  377.         }  
  378.         tail = front;  
  379.         front = pList->pHead;  
  380.     }  
  381. }  
  382. void menu()  
  383. {  
  384.     printf("*********1.尾插***************\n");  
  385.     printf("*********2.尾删***************\n");  
  386.     printf("*********3.头插***************\n");  
  387.     printf("*********4.头删***************\n");  
  388.     printf("*********5.打印***************\n");  
  389.     printf("*********6.插入***************\n");  
  390.     printf("*********7.删除指定元素********\n");  
  391.     printf("*********8.删除指定的全部*******\n");  
  392.     printf("*********9.删除指定位置的元素***\n");  
  393.     printf("*********10.排序****************\n");  
  394.     printf("*********0.退出*******\n");  
  395. }  
  396.   
  397.   
  398.   
  399. //test.c  
  400. #include"LinkList.h"  
  401. void test()  
  402. {  
  403.     LinkList list;  
  404.     pLinkNode pos = NULL;  
  405.     InitLinkList(&list);  
  406.     int input = 1;  
  407.     DataType x = 0;  
  408.     DataType y = 0;  
  409.     while (input)  
  410.     {  
  411.         menu();  
  412.         printf("please your choice:>");  
  413.         scanf("%d",&input);  
  414.         switch (input)  
  415.         {  
  416.         case EXIT:  
  417.             DestroyLinkList(&list);  
  418.             break;  
  419.         case PUSHBACK:  
  420.             printf("please input a number of insertion:>");  
  421.             scanf("%d",&x);  
  422.             PushBackLinkList(&list, x);  
  423.             break;  
  424.         case POPBACK:  
  425.             PopBackLinkList(&list);  
  426.             break;  
  427.         case PUSHFRONT:  
  428.             printf("please input a number of insertion:>");  
  429.             scanf("%d", &x);  
  430.             PushFrontLinkList(&list, x);  
  431.             break;  
  432.         case POPFRONT:  
  433.             PopFrontLinkList(&list);  
  434.             break;  
  435.         case PRINT:  
  436.             PrintLinkList(&list);  
  437.             break;  
  438.         case REMOVE:  
  439.             printf("please input a number of delete:>");  
  440.             scanf("%d", &x);  
  441.             Remove(&list, x);  
  442.             break;  
  443.         case REMOVEALL:  
  444.             printf("please input a number of delete:>");  
  445.             scanf("%d", &x);  
  446.             RemoveAll(&list, x);  
  447.             break;  
  448.         case ERASE:  
  449.             printf("please input a number of delete:>");  
  450.             scanf("%d", &x);  
  451.             pos = find(&list,x);  
  452.             Erase(&list, pos);  
  453.             break;  
  454.         case SORT:  
  455.             BottleSort(&list);  
  456.             break;  
  457.         case INSERT:  
  458.             printf("please input a number of insertion:>");  
  459.             scanf("%d", &x);  
  460.             printf("please input a number of the data of pos:>");  
  461.             scanf("%d", &y);  
  462.             pos = find(&list, y);  
  463.             InsertLinkList(&list, x, pos);  
  464.             break;  
  465.         }  
  466.     }  
  467. }  
  468. int main()  
  469. {  
  470.     test();  
  471.     system("pause");  
  472.     return 0;  

相关文章: