標籤:資料結構 順序表 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 tail_insert(const Type &x);void head_insert(const Type &x);void sort();void head_delete();void tail_delete();void pos_insert(int pos,const Type &x);void val_insert(const Type &x);void pos_delete(int pos);int find(const Type &x);void val_delete(const Type &x);int length();void reverse();void clear();void destroy();void quit_system(Type &x);private:enum{ INIT_SIZE = 8 };Type *base;size_t size;size_t capacity;};// 建構函式template<class Type>SeqList<Type>::SeqList(size_t sz = INIT_SIZE){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 << "the table is empty!" << endl;return;}for (int i = 0; i < size; ++i){cout << base[i] << " ";}cout << endl;}// 尾插template<class Type>void SeqList<Type>::tail_insert(const Type &x){// 判斷表是否滿if (isfull()){cout << "table is full,can not insert!" << endl;return;}// 進行尾插base[size] = x;size++;}// 頭插template<class Type>void SeqList<Type>::head_insert(const Type &x){// 判斷表是否滿if (isfull()){cout << "the table is full,can not insert!" << endl;return;}// 把元素往後移for (int i = size; i > 0; --i){base[i] = base[i - 1];}// 進行頭插base[0] = x;size++;}// 排序template<class Type>void SeqList<Type>::sort(){for (int i = 1; i < size; ++i){for (int j = 0; j < size - i; ++j){if (base[j]>base[j + 1]){int temp = base[j];base[j] = base[j + 1];base[j + 1] = temp;}}}}// 頭刪template<class Type>void SeqList<Type>::head_delete(){if (isempty()){cout << "the table is empty,can not delete!" << endl;return;}for (int i = 0; i < size; ++i){base[i] = base[i + 1];}size--;}// 尾刪template<class Type>void SeqList<Type>::tail_delete(){if (isempty()){cout << "the table is empty,can not delete!" << endl;return;}size--;}// 按位插入template<class Type>void SeqList<Type>::pos_insert(int pos,const Type &x){if (isfull()){cout << "the table is full,can not insert!" << endl;return;}if (pos<0 || pos>size){cout << "the position is illegal!" << endl;return;}else{for (int i = size; i > pos; --i){base[i] = base[i - 1];}base[pos] = x;size++;}}// 按值插入template<class Type>void SeqList<Type>::val_insert(const Type &x){if (isfull()){cout << "the table is full,can not insert!" << endl;return;}tail_insert(x);sort();}// 按位刪除template<class Type>void SeqList<Type>::pos_delete(int pos){if (isempty()){cout << "the table is empty,can not delete!" << endl;return;}if (pos<0 || pos>size - 1){cout << "the position is illegal!" << endl;return;}else{for (int i = pos; i < size; ++i){base[i] = base[i + 1];}size--;}}// 尋找template<class Type>int SeqList<Type>::find(const Type &x){for (int i = 0; i < size; ++i){if (base[i] == x)return i;}cout << "the value is not exist!" << endl;return 0;}// 按值刪除template<class Type>void SeqList<Type>::val_delete(const Type &x){if (isempty()){cout << "the table is empty,can not delete!" << endl;return;}int pos = find(x);for (int i = pos; i < size; ++i){base[i] = base[i + 1];}size--;}// 求表長template<class Type>int SeqList<Type>::length(){return size;}// 反轉表內容template<class Type>void SeqList<Type>::reverse(){if (isempty()){cout << "the table is empty, can not operate!" << endl;return; }int i = 0;int j = size - 1;while (i < j){int temp = base[i];base[i] = base[j];base[j] = temp;++i;--j;}}// 清除表template<class Type>void SeqList<Type>::clear(){size = 0;}// 摧毀表template<class Type>void SeqList<Type>::destroy(){base = NULL;}// 退出系統template<class Type>void SeqList<Type>::quit_system(Type &x){x = 0;}
主函數:
<pre name="code" class="cpp">// 用c++實現順序表#include "SeqList.h"int main(){SeqList<int> mylist;int input = 1;int insert;int pos;while (input){cout << "*********************************************************************" << endl;cout << "* [1] show_list [2] tail_insert *" << endl;cout << "* [3] head_insert [4] sort *" << endl;cout << "* [5] head_delete [6] tail_delete *" << endl;cout << "* [7] pos_insert [8] val_insert *" << endl;cout << "* [9] pos_delete [10] find *" << endl;cout << "* [11] val_delete [12] length *" << endl;cout << "* [13] reverse [14] clear *" << endl;cout << "* [15] destroy [16] quit_system *" << endl;cout << "*********************************************************************" << endl;cout << "please choose:";cin >> input;switch (input){case 1:mylist.show_list();break;case 2:cout << "please enter the number to be inserted(-1 end):" << endl;while (cin >> insert, insert != -1){mylist.tail_insert(insert);}break;case 3:cout << "please enter the number to be inserted(-1 end):" << endl;while (cin >> insert, insert != -1){mylist.head_insert(insert);}break;case 4:mylist.sort();break;case 5:mylist.head_delete();break;case 6:mylist.tail_delete();break;case 7:cout << "please enter the position you want to insert:" << endl;cin >> pos;cout << "please enter the number to be inserted:" << endl;cin >> insert;mylist.pos_insert(pos, insert);break;case 8:cout << "please enter the number to be inserted:" << endl;cin >> insert;mylist.val_insert(insert);break;case 9:cout << "please enter the position you want to delete:" << endl;cin >> pos;mylist.pos_delete(pos);break;case 10:cout << "please enter the number to be found:" << endl;cin >> insert;cout << mylist.find(insert) << endl;break;case 11:cout << "please enter the number you want to delete:" << endl;cin >> insert;mylist.val_delete(insert);break;case 12:cout << mylist.length() << endl;break;case 13:mylist.reverse();break;case 14:mylist.clear();break;case 15:mylist.destroy();break;case 16:mylist.quit_system(input);break;default:break;}}return 0;}
show功能:
<img src="http://img.blog.csdn.net/20150518174746615?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
尾插:
<img src="http://img.blog.csdn.net/20150518174917630?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
頭插:
<img src="http://img.blog.csdn.net/20150518175227435?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="http://img.blog.csdn.net/20150518175212221?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
排序:
<img src="http://img.blog.csdn.net/20150518175244326?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
尾刪:
<img src="http://img.blog.csdn.net/20150518175438179?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
頭刪:
<img src="http://img.blog.csdn.net/20150518175509176?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="http://img.blog.csdn.net/20150518175436381?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
定位插入:
<img src="http://img.blog.csdn.net/20150518175510374?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
按值插入:
<img src="http://img.blog.csdn.net/20150518175620718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
按位刪除:
<img src="http://img.blog.csdn.net/20150518175606721?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
尋找:
<img src="http://img.blog.csdn.net/20150518175639809?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
按值刪除:
<img src="http://img.blog.csdn.net/20150518175803195?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
求長度:
<img src="http://img.blog.csdn.net/20150518175830354?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
反轉:
<img src="http://img.blog.csdn.net/20150518175816451?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
清除:
<img src="http://img.blog.csdn.net/20150518175923160?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
退出系統:
<img src="http://img.blog.csdn.net/20150518175908446?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
【資料結構】實現順序表(c++)