(C++版)链表(二)——实现单项循环链表创建、插入、删除等操作

来源:互联网 发布:vmware安装ubuntu教程 编辑:程序博客网 时间:2024/05/18 11:50

http://blog.csdn.net/fisherwan/article/details/25561857

链表(二)单向循环链表的实现,下面实现代码:

[cpp] view plain copy
  1. <span style="font-size:18px;" deep="5">#include <iostream>  
  2. #include <stdlib.h>  
  3. using namespace std;  
  4.   
  5. //结点类  
  6. class Node {  
  7. public:  
  8.     int data;  
  9.     Node *pNext;  
  10. };  
  11. //单向循环链表类  
  12. class CircularLinkList {  
  13. public:  
  14.     CircularLinkList() {  
  15.         head = new Node;  
  16.         head->data = 0;  
  17.         head->pNext = head;  
  18.     }  
  19.     ~CircularLinkList() {delete head;}  
  20.     void CreateLinkList(int n);             //创建单向循环链表  
  21.     void InsertNode(int position, int d);   //在指定位置插入结点  
  22.     void TraverseLinkList();                //遍历链表  
  23.     bool IsEmpty();                         //判断链表是否为空  
  24.     int GetLength();                        //得到链表的长度  
  25.     void DeleteNode(int position);          //删除指定位置结点  
  26.     void DeleteLinkList();                  //删除链表  
  27. private:  
  28.     Node *head;  
  29. };  
  30.   
  31. void CircularLinkList::CreateLinkList(int n) {  
  32.     if (n < 0) {  
  33.         cout << "输入结点个数错误!" << endl;  
  34.         exit(EXIT_FAILURE);  
  35.     }  
  36.     else {  
  37.         Node *pnew, *ptemp = head;  
  38.         int i = n;  
  39.         while (n-- > 0) {  
  40.             cout << "输入第" << i - n << "个结点值:";          
  41.             pnew = new Node;  
  42.             cin >> pnew->data;  
  43.             pnew->pNext = head;  
  44.             ptemp->pNext = pnew;  
  45.             ptemp = pnew;     
  46.         }     
  47.     }  
  48. }  
  49.   
  50. void CircularLinkList::InsertNode(int position, int d) {  
  51.     if (position < 0 || position > GetLength() + 1) {  
  52.         cout << "输入位置错误!" << endl;  
  53.         exit(EXIT_FAILURE);  
  54.     }  
  55.     else {  
  56.         Node *pnew, *ptemp = head;  
  57.         pnew = new Node;  
  58.         pnew->data = d;  
  59.         while (position-- > 1)  
  60.             ptemp = ptemp->pNext;  
  61.         pnew->pNext = ptemp->pNext;  
  62.         ptemp->pNext = pnew;  
  63.     }  
  64. }  
  65.   
  66. void CircularLinkList::TraverseLinkList() {  
  67.     Node *ptemp = head->pNext;  
  68.     while (ptemp != head) {  
  69.         cout << ptemp->data << " ";  
  70.         ptemp = ptemp->pNext;  
  71.     }  
  72.     cout << endl;  
  73. }  
  74.   
  75. bool CircularLinkList::IsEmpty() {  
  76.     if (head->pNext == head)  
  77.         return true;  
  78.     else  
  79.         return false;  
  80. }  
  81.   
  82. int CircularLinkList::GetLength() {  
  83.     int n = 0;  
  84.     Node *ptemp = head->pNext;  
  85.     while (ptemp != head) {  
  86.         n++;  
  87.         ptemp = ptemp->pNext;  
  88.     }  
  89.     return n;  
  90. }  
  91.   
  92. void CircularLinkList::DeleteNode(int position) {  
  93.     if (position < 0 || position > GetLength()) {  
  94.         cout << "输入位置错误!" << endl;  
  95.         exit(EXIT_FAILURE);  
  96.     }  
  97.     else {  
  98.         Node *ptemp = head, *pdelete;  
  99.   
  100.         while (position-- > 1)  
  101.             ptemp = ptemp->pNext;  
  102.         pdelete = ptemp->pNext;  
  103.         ptemp->pNext = pdelete->pNext;  
  104.         delete pdelete;  
  105.         pdelete = NULL;  
  106.     }  
  107. }  
  108.   
  109. void CircularLinkList::DeleteLinkList() {  
  110.     Node *pdelete = head->pNext, *ptemp;  
  111.     while (pdelete != head) {  
  112.         ptemp = pdelete->pNext;  
  113.         head->pNext = ptemp;  
  114.         delete pdelete;  
  115.         pdelete = ptemp;  
  116.     }  
  117. }  
  118.   
  119. //测试函数  
  120. int main() {  
  121.   
  122.     CircularLinkList cl;  
  123.     int position = 0, value = 0, n = 0;  
  124.     bool flag = false;  
  125.   
  126.     cout << "请输入需要创建单向循环链表的结点个数:";  
  127.     cin >> n;  
  128.     cl.CreateLinkList(n);  
  129.   
  130.     cout << "打印链表值如下:";  
  131.     cl.TraverseLinkList();  
  132.   
  133.     cout << "请输入插入结点的位置和值:";  
  134.     cin >> position >> value;  
  135.     cl.InsertNode(position, value);  
  136.       
  137.     cout << "打印链表值如下:";  
  138.     cl.TraverseLinkList();  
  139.   
  140.     cout << "请输入要删除结点的位置:";  
  141.     cin >> position;  
  142.     cl.DeleteNode(position);  
  143.   
  144.     cout << "打印链表值如下:";  
  145.     cl.TraverseLinkList();  
  146.   
  147.     cl.DeleteLinkList();  
  148.     flag = cl.IsEmpty();  
  149.     if (flag)  
  150.         cout << "删除链表成功!" << endl;  
  151.     else  
  152.         cout << "删除链表失败!" << endl;  
  153.   
  154.     return 0;  
  155. }</span>  



阅读全文
0 0
原创粉丝点击