数据结构 单链表实现前插、后插、前删、后删、显示、查找等等
2015-10-14 00:02
681 查看
#include"SeqList.h" void main() { SeqList<int> mylist; int select = 1; int Item; int pos; while(select) { cout<<"******************************************"<<endl; cout<<"* [1] push_back [2] push_front *"<<endl; cout<<"* [3] show_list [4] pop_back *"<<endl; cout<<"* [5] pop_front [6] insert_val *"<<endl; cout<<"* [7] insert_pos [8] find *"<<endl; cout<<"* [9] delete_pos [10] delete_val*"<<endl; cout<<"* [11] sort [12] resert *"<<endl; cout<<"* [13] length [14] clear *"<<endl; cout<<"* [15] destory [0] quit_system*"<<endl; cout<<"******************************************"<<endl; 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<<"请输入要插入的数据:"<<endl; cin>>Item; mylist.insert_val(Item); break; case 7: cout<<"请输入要插入的数据:"<<endl; cin>>Item; cout<<"请输入要插入的位置:"<<endl; cin>>pos; mylist.insert_pos(pos,Item); break; case 8: cout<<"请输入要查找的数据:"<<endl; cin>>Item; pos = mylist.find(Item); if(pos == -1) cout<<"所查找的数据不存在!"<<endl; break; case 9: cout<<"请输入要删除的位置:"<<endl; cin>>pos; mylist.delete_pos(pos); break; case 10: cout<<"请输入要删除的数值:"<<endl; cin>>Item; mylist.delete_val(Item); break; case 11: mylist.sort(); break; case 12: mylist.resver(); break; case 13: cout<<"顺序表的长度为:"<<mylist.length()<<endl; break; case 14: mylist.clear(); break; case 15: mylist.destory(); break; default: break; } } }
#include<iostream> using namespace std; #ifndef SEQLIST_H #define SEQLIST_H typedef enum{FALSE,TRUE}Status; #define DefaultSize 8 template<typename type> class SeqList { public: SeqList(int sz = DefaultSize) { capacity = sz > DefaultSize ? sz : DefaultSize; base = new type[capacity]; size = 0; } ~SeqList() { delete []base; base = NULL; capacity = size = 0; } public: Status IsFull()const { if(size >= capacity) return TRUE; else return FALSE; } Status IsEmpty()const { if(size == 0) return TRUE; else return FALSE; } Status push_back(const type &x) { if(IsFull()) { cout<<"空间已满"<<x<<"不能插入顺序表!"<<endl; return FALSE; } else base[size++] = x; return TRUE; } Status push_front(const type &x) { if(IsFull()) { cout<<"空间已满"<<x<<"不能插入顺序表!"<<endl; return FALSE; } for(int i=size; i>0; --i) { base[i] = base[i-1]; } base[0] = x; size++; return TRUE; } Status pop_back() { if(IsEmpty()) { cout<<"顺序表已空,不能尾删数据!"<<endl; return FALSE; } size--; return TRUE; } void show_list()const { for(int i=0; i<size; ++i) { cout<<base[i] <<" "; } cout<<endl; } Status pop_front() { if(IsEmpty()) { cout<<"顺序表已空,不能头删数据!"<<endl; return FALSE; } for(int i=0; i<size; i++) { base[i] = base[i+1]; } size--; return TRUE; } Status insert_val(const type &x) { if(IsFull()) { cout<<"空间已满,不能按值插入!"<<endl; return FALSE; } int i = 0; while(i<size && x>base[i]) { i++; } insert_pos(i,x); return TRUE; } Status insert_pos(int pos, const type &x) { if(pos<0 || pos>size) return FALSE; for( int i=size; i>pos; --i) { base[i] = base[i-1]; } base[pos] = x; size++; return TRUE; } int find(const type &key)const { if(size == 0) { cout<<"空间为空,不能继续查找!"<<endl; return -1; } for(int i=0; i<size; ++i) { if( base[i] == key) return i; } return -1; } Status delete_pos(int pos) { if(pos<0 || pos>size) { return FALSE; } for(int i=pos; i<size; ++i) { base[i] = base[i+1]; } size--; return TRUE; } Status delete_val(const type &x) { int pos = find(x); if(pos == -1) { return FALSE; } delete_pos(pos); return TRUE; } void sort() { if(size == 0) return ; for(int i=0; i<size-1; ++i) for(int j=0; j<size-i-1; ++j) { if(base[j]>base[j+1]) { int tmp = base[j+1]; base[j+1] = base[j]; base[j] = tmp; } } } void resver() { if(size == 0) return ; int i = 0; int j = size-1; while(i<j) { type tmp =base[i]; base[i] = base[j]; base[j] = tmp; i++; j--; } } int length()const { return size; } void clear() { size = 0; } Status destory() { if(base==NULL) return FALSE; delete []base; size = capacity = 0; return TRUE; } private: type *base; int size; int capacity; }; #endif