设为首页 加入收藏

TOP

C++数据结构 顺序表的实现(模板类的实现)(一)
2015-11-21 01:01:13 来源: 作者: 【 】 浏览:3
Tags:数据结构 顺序 实现 模板

利用模板类实现顺序表的操作

实现的功能:

1.尾插,2.头插,3.显示,4.尾删,5.头删,6.按位置,7.插按值插,8.按位置删,9.按值删,10.按值查,11.求表长,12.清除数据,13.摧毁该顺序表,14.反转,15.排序(冒泡排序,快速排序)。

头文件源代码:

?

#pragma once        // 防止重复编译

#include
  
   
using namespace std;

template
   
     class SeqList { public: SeqList(size_t sz=INIT_SIZE); public: bool isfull()const {return size>=capacity;} bool isempty()const {return size==0;} public: void push_back(const Type &x); //尾插 void push_front(const Type &x); //头插 void show_list(); //显示 void pop_back(); //尾删 void pop_front(); //头删 void insert_pos(int pos,const Type &x);//按位置插 void insert_val(const Type &x); //按值插 void delete_pos(int pos); //按位置删 void delete_val(const Type &x); //按值删 int find(const Type &key); //按值查 int length()const; //求表长 void clear(); //清除数据 void destroy(); //摧毁该顺序表 void reserv(); //反转 void sort(/*int low,int high*/); //排序 private: enum{INIT_SIZE=8}; Type *base; size_t capacity; size_t size; }; template
    
      SeqList
     
      ::SeqList(size_t sz) { capacity = sz > INIT_SIZE ? sz : INIT_SIZE; base = new Type[capacity]; size = 0; } template
      
        void SeqList
       
        ::push_back(const Type &x) { if(isfull()) { cout<<"顺序表已满,不能插入!"<
        
          void SeqList
         
          ::push_front(const Type &x) { if(isfull()) { cout<<"顺序表已满,不能插入!"<
          
           0; --i) { base[i] = base[i-1]; } base[0] = x; size++; } template
           
             void SeqList
            
             ::show_list() { for(int i=0; i
             
              %3Cbase%5Bi%5D%3C%3C%22%20%22%3B%0A%09%7D%0A%09cout%3C%3Cendl%3B%0A%7D%0A%0Atemplate%3Cclass%20Type%3E void SeqList
              
               ::pop_back() { if(isempty()) { cout<<"顺序表已满"<
               
                 void SeqList
                
                 ::pop_front() { int i; for(i = 0;i
                 
                   void SeqList
                  
                   ::insert_pos(int pos,const Type &x) { if(pos<0 || pos>size) { cout<<"要插入的位置非法!"<
                   
                    pos; --i) { base[i] = base[i-1]; } base[pos] = x; size++; } template
                    
                      void SeqList
                     
                      ::insert_val(const Type &x) { int pos; pos = find(x); insert_pos(pos,x); } template
                      
                        void SeqList
                       
                        ::delete_pos(int pos) { int i; for(i = pos;i
                        
                          void SeqList
                         
                          ::delete_val(const Type &x) { int pos = find(x); if(pos == -1) { return; } for(int i=pos; i
                          
                            int SeqList
                           
                            ::find(const Type &key) { for(int i=0; i
                            
                              int SeqList
                             
                              ::length()const { cout<<"表长是:"<
                              
                                void SeqList
                               
                                ::clear() { while(size) { base[size--] = NULL; } } template
                                
                                  void SeqList
                                 
                                  ::destroy() { int i; delete base; base = NULL; capacity = 0; size = 0; } template
                                  
                                    void SeqList
                                   
                                    ::reserv() { int i = 0; int m = size - 1; for(;i<=((size-1)/2);++i) { int tmp = base[i]; base[i] = base[m]; base[m] = tmp; m--; } } template
                                    
                                      void SeqList
                                     
                                      ::sort()//排序 { for (int i=0;i<=size;i++) for (int j=i+1;j<=size-1;j++) { if(base[i]>base[j]) { int tmp = base[j]; base[j]=base[i]; base[i]=tmp; } } } /* template
                                      
                                        ///快速排序 void SeqList
                                       
                                        ::sort(int low,int high) { if(low >= high) { return; } int first = low; int last = high; int key = base[first]; //用字表的第一个记录作为枢轴 while(first < last) { while(first < last && base[last] >= key) { last--; } base[first] = base[last];//将比第一个小的移到低端 while(first < last && base[first] <= key) { first++; } base[last] = base[first];//将比第一个大的移到高端 } base[first] = key;//枢轴记录到位 sort(low, first-1); sort(first+1, high); } */ 
                                       
                                      
                                     
                                    
                                   
                                  
                                 
                                
                               
                              
                             
                            
                           
                          
                         
                        
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
        
       
      
     
    
   
  

?

?

主函数:

?

#include"SeqList.h"

int main()
{
	SeqList
  
    mylist;
	int select = 1;
	int Item;
	int pos;
	while(select)
	{
		cout<<"**************************************"<
   
    "; cin>>select; switch(select) { case 1: cout<<"请输入要插入的值(-1结束):>"; while(cin>>Item, Item!=-1) { mylist.push_back(Item); } break; case 2: cout<<"请输入要插入的值(-1结束):>"; while(cin>>Item, Item!=-1) { mylist.push_front(Item); } break; case 3: mylist.show_list(); break; case 4: mylist.pop_back(); break; case 5: mylist.pop_front(); break; case 6: cout<<"请输入要插入的位置:>"; cin>>pos; cout<<"请输入要插入的值:>"; cin>>Item; mylist.insert_pos(pos,Item); break; case 7: cout<<"请输入要插入的值:>"; cin>>Item; mylist.insert_val(Item); case 8: cout<<"请输入要删除的位置:>"; cin>>pos; mylist.delete_pos(pos); break; case 9: cout<<"请输入要删除的值:>"; cin>>Item; mylist.delete_val(Item); break; case 10: cout<<"请输入要查找的值:>"; cin>>Item; int pos; pos = mylist.find(Item); break; case 11: mylist.length(); break; case 12: mylist.clear(); break; case 13: mylist.destroy(); break; case 14: mylist.reserv()
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA - 11504 Dominos 强连通分量 下一篇kyeremal-poj1113-Wall-凸包

评论

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