【資料結構】用C++實現順序表的各種操作(包括頭刪,尾刪,插入,逆序,摧毀,清空等等)

來源:互聯網
上載者:User

標籤:資料結構   順序表   類   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++實現順序表的各種操作(包括頭刪,尾刪,插入,逆序,摧毀,清空等等)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.