设为首页 加入收藏

TOP

[数据结构]用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)(一)
2015-11-21 01:00:39 来源: 作者: 【 】 浏览:7
Tags:数据结构 实现 双循环 各种 操作 包括 尾删 插入 逆序 摧毁 清空 等等
//【数据结构】用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//头文件

#ifndef _CDLIST_H
#define _CDLIST_H


#include
  
   
using namespace std;


template
   
     class CDList; template
    
      class ListNode { friend class CDList
     
      ; public: ListNode() :data(Type()), next(NULL), prio(NULL) {} ListNode(Type d, ListNode
      
        *n = NULL, ListNode
       
         *m = NULL) :data(d), next(n), prio(m) {} ~ListNode() {} private: Type data; ListNode
        
          *next; ListNode
         
           *prio; }; template
          
            class CDList { public: CDList() { first = last = Buynode(); last->next = first; first->prio = last; } ~CDList() { destroy(); } public: void push_back(const Type &x) //尾插`` { ListNode
           
             *s = Buynode(x); last->next = s; s->prio = last; s->next = first; first->prio = s; last = s; first->data++; } void push_front(const Type &x) //头插`` { if (first->data == 0) { push_back(x); return; } ListNode
            
              *s = Buynode(x); s->next = first->next; first->next->prio = s; first->next = s; s->prio = first; first->data++; } void pop_back() //尾删`` { if (first->data == 0) return; ListNode
             
               *p = last; last = last->prio; last->next = first; first->prio = last; delete p; first->data--; } void pop_front() //头删`` { if (first->data == 0) { return; } else { ListNode
              
                *s = first->next; if (first->data == 1) { last = first; last->next = first; first->prio = last; } else { first->next = s->next; s->next->prio = first; } delete s; first->data--; } } void insert_val(const Type &x) //按值插入`` { ListNode 
               
                 *p = Buynode(x); ListNode 
                
                  *s = first; if (first->data == 0) { push_back(x); return; } while (s->next->data
                 
                  next->next != first) { s = s->next; } if (s->next->next == first) { if (s->next->data>x) { p->next = s->next; s->next->prio = p; s->next = p; p->prio = s; first->data++; } else push_back(x); } else { p->next = s->next; s->next->prio = p; s->next = p; p->prio = s; first->data++; } } void show_list() //显示`` { if (first->data == 0) { cout << "NULL" << endl; return; } ListNode
                  
                    *q = first->next; while (q != first) { cout << q->data << "->"; q = q->next; } cout << "NULL first->data=" << first->data << " last->next->data=" << last->next->data << " last->data=" << last->data << " first->prio->data=" << first->prio->data << " " << endl; } void sort() //排序`` { if (first->data == 0) { return; } ListNode
                   
                     *p = first->next; ListNode
                    
                      *q = p->next; p->next = first; first->prio = p; last = p; first->data = 1; ListNode
                     
                       *r; while (q != first) { insert_val(q->data); r = q; q = q->next; delete r; } } ListNode
                      
                       * find(const Type &x) //查找`` { ListNode
                       
                         *s; for (s = first->next; s != first; s = s->next) { if (s->data == x) { return s; } } return NULL; } int length() //求长度`` { return(first->data); } void delete_val(const Type &x) //按值删除`` { if (first->data == 0) { cout << "未找到该数:" << endl; return; } else { ListNode
                        
                          *p = find(x); if (p == NULL) { cout << "未找到该数:" << endl; return; } ListNode
                         
                           *q = first; while (q->next != p) { q = q->next; } if (q->next->next == first) { pop_back(); } else { q->next = p->next; p->next->prio = q; delete p; first->data--; } } } void clear() //清除`` { if (first->data == 0) return; while (first->next != first) { pop_back(); } } void resver() //逆序`` { if (first->data == 0) { return; } ListNode
                          
                            *p = first->next; ListNode
                           
                             *q = p->next; p->next = first; first->prio = p; last = p; first->data = 1; ListNode
                            
                              *r; while (q != first) { push_front(q->data); r = q; q = q->next; delete r; } } void quit_system(int &a) //退出`` { clear(); a = 0; } void destroy() //摧毁`` { clear(); delete first; } protected: ListNode
                             
                              * Buynode(Type x = Type()) { ListNode
                              
                                *p = new ListNode
                               
                                (x); return p; } private: ListNode
                                
                                  *first; ListNode
                                 
                                   *last; }; #endif //主函数 #include"CDList.h" void main() { CDList
                                  
                                    mylist; int select = 1; int Item; while (select) { cout << "**************************************" << endl; cout << "* [1] show_list [2] push_front *" << endl; cout << "* [3] push_back [4] pop_front *" << endl; cout << "* [5] pop_back [6] insert_val *" << endl; cout << "* [7] find [8] delete_val *" << endl; cout << "* [9]length [10] clear *" << endl; cout << "* [11] quit_system [12] destroy *" << endl; cout << "* [13] resver [14] sort *" << endl; cout << "**************************************" << endl; cout << "请选择:>"; cin >> select; switch (select) { case 1: mylist.show_list(); break; case 2: cout << "请输入要插入的值(-1结束):>"; while (cin >> Item, Item != -1) { mylist.push_front(Item); } break; case 3: cout << "请输入要插入的值(-1结束):>"; while (cin >> Item, Item != -1) { mylist.pus
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[数据结构]用C++编写栈及基本操作.. 下一篇poj(2676)――Sudoku

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: