標籤:資料結構 順序表 類 c++ 操作
//順序表的各種操作(包括頭刪,尾刪,插入,逆序,摧毀,清空等等)//標頭檔#pragma once#include <iostream>using namespace std;template<class Type>class SeqList{public:SeqList(size_t sz = INIT_SIZE);~SeqList();public:bool isfull() const{return size >= capacity; }bool isempty() const{return (size == 0); }public:void show_list();void push_front(const Type &x);void push_back(const Type &x);void insert_pos(int pos,const Type &x);int find(const Type &key);void pop_front();void pop_back();void sort();void insert_val(const Type &x);void delete_pos(int pos);void delete_val(const Type &x);int length();void clear();void destory();void reverse();void quit_system(int &a);private:enum{ INIT_SIZE = 8 };Type *base;size_t capacity;size_t size;}; template<class Type> //建構函式SeqList<Type>::SeqList(size_t sz){capacity = sz > INIT_SIZE ? sz : INIT_SIZE;base = new Type[capacity];size = 0;}template<class Type> //解構函式SeqList<Type>::~SeqList(){delete base;}template<class Type> //顯示void SeqList<Type>::show_list(){if (size == 0){cout << "資料表為空白。" << endl;return;}for (int i = 0; i<size; ++i){cout << base[i] << " ";}cout << endl;} template<class Type> //頭插void SeqList<Type>::push_front(const Type &x){if (isfull()){cout << "順序表已滿,不能插入." << endl;return;}for (int i = size; i > 0; --i){base[i] = base[i - 1];}base[0] = x;size++;}template<class Type> //尾插void SeqList<Type>::push_back(const Type &x){if (isfull()){cout << "順序表已滿,不能插入." << endl;return;}base[size] = x;size++;}template<class Type>//按位置插void SeqList<Type>::insert_pos(int pos, const Type &x){if (pos<0 || pos>size){cout << "插入的位置不正確。" << endl;return;}if ( isfull() ){cout << "順序表已滿,不能插入." << endl;return;}for (int i = size; i > pos; --i){base[i] = base[i - 1];}base[pos] = x;size++;}template<class Type>//尋找int SeqList<Type>::find(const Type &key){for (int i = 0; i<size; ++i){if (base[i] == key)return i;}return -1;}template<class Type>//頭刪void SeqList<Type>::pop_front(){if (isempty()){cout << "順序表為空白,不能刪除。" << endl;return;}for (int i = 0; i < size; ++i){base[i] = base[i + 1];}size--;}template<class Type>void SeqList<Type>::pop_back()//尾刪{if (isempty()){cout << "順序表為空白,不能刪除。" << endl;return;}size--;}template<class Type>//排序void SeqList<Type>::sort(){if (isempty()){return;}for (int i = 1; i < size; i++){for (int j = 0; j < size - i; j++){int temp;if (base[j]>base[j + 1]){temp = base[j];base[j] = base[j + 1];base[j + 1] = temp;}}}}template<class Type>//按值插入void SeqList<Type>::insert_val(const Type &x){push_back(x); //尾插sort(); //排序}template<class Type>//按位置刪除void SeqList<Type>::delete_pos(int pos){if (isempty()){cout << "順序表為空白,不能刪除。" << endl;return;}if (pos < 0 || pos >= size){cout << "刪除的位置不正確。" << endl;return;}for (int i = pos; i < size; ++i){base[i] = base[i + 1];}size--;}template<class Type>//按值刪除void SeqList<Type>::delete_val(const Type &x){if (isempty()){cout << "順序表為空白,不能刪除。" << endl;return;}int pos=find(x); if (pos == -1){cout << "未找到該數。" << endl;return;}delete_pos(pos);}template<class Type>//求長度int SeqList<Type>::length(){return size;}template<class Type>//清除表void SeqList<Type>::clear(){size = 0;}template<class Type>//摧毀表void SeqList<Type>::destory(){base = NULL;}template<class Type>//逆序void SeqList<Type>::reverse(){for (int i = 0,j = size - 1; i < size / 2; i++, j--){int temp = base[i];base[i] = base[j];base[j] = temp;}}template<class Type>//退出void SeqList<Type>::quit_system(int &a){a = 0;}//主函數#include"SeqList.h"void main(){SeqList<int> mylist;int select = 1;int Item;int pos;while (select){cout << "************************************************************************" << endl;cout << "* [1] show_list [2] quit_system *" << endl;cout << "* [3] push_front [4] push_back *" << endl;cout << "* [5] pop_front [6] pop_back *" << endl;cout << "* [7] insert_pos [8] insert_val *" << endl;cout << "* [9] delete_pos [10] delete_val *" << endl;cout << "* [11] find [12] length *" << endl;cout << "* [13] clear [14] destory *" << endl;cout << "* [15] reverse(逆序) [16] sort(順序) *" << endl;cout << "************************************************************************" << endl;cout << "請選擇功能:";cin >> select;switch (select){case 1:mylist.show_list();break;case 2:mylist.quit_system(select);break;case 3:cout << "請輸入您要插入的數(以-1結束):";while (cin >> Item, Item != -1){mylist.push_front(Item);}break;case 4:cout << "請輸入您要插入的數(以-1結束):";while (cin >> Item, Item !=-1){mylist.push_back(Item);}break;case 5:mylist.pop_front();break;case 6:mylist.pop_back();break;case 7:cout << "請輸入您要插入的位置:";cin >> pos;cout << "請輸入您要插入的值:";cin >> Item;mylist.insert_pos(pos, Item);break;case 8:cout << "請輸入要插入的數:";cin >> Item;mylist.insert_val(Item);break;case 9:cout << "請輸入要刪的位置:"; cin >> pos;mylist.delete_pos(pos);break;case 10:cout << "請輸入要刪的值:";cin >> Item;mylist.delete_val(Item);break;case 11:cout << "請輸入要尋找的數:";cin >> Item;pos = mylist.find(Item);if (pos != -1){cout << "該數為第" << pos << "個數" << endl;}cout << "未找到該數。"<<endl;break;case 12:cout <<"該順序表長度為:"<< mylist.length() << endl;break;case 13:mylist.clear();break;case 14:mylist.destory();break;case 15:mylist.reverse();break;case 16:mylist.sort();break;default:break;}}}<img src="http://img.blog.csdn.net/20150518182849875?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG91ZG91d2ExMjM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
【資料結構】用C++實現順序表的各種操作(包括頭刪,尾刪,插入,逆序,摧毀,清空等等)