【c++版資料結構】之順序表的實現

來源:互聯網
上載者:User

SeqList.h

#ifndef SEQLIST_H#define SEQLIST_H#include<iostream>using namespace std;typedef enum{TRUE,FALSE}Status;template<class Type>class SeqList{private:enum{DefaultSize = 10};  //順序表的預設長度Type *base;              //存放元素數組的首地址int capacity;            //順序表的容量int size;                //順序表實際存放元素的個數private://為內建函式所調用,不希望在類外訪問bool IsFull(){if (size == capacity)return true;elsereturn false;}bool IsEmpty(){if (size == 0)return true;elsereturn false;}Status destory(){if (base == NULL)return FALSE;delete[] base;base = NULL;capacity = size = 0;return TRUE;}public:SeqList(int sz = DefaultSize){capacity = sz > capacity ? sz : capacity;base = new Type[capacity];size = 0;}~SeqList(){destory();}Status push_back(const Type &x){if (IsFull()){cout << "空間已滿" << x << "不能插入" << endl;return FALSE;}base[size++] = x;return TRUE;}Status push_front(const Type &x){if (IsFull()){cout << "空間已滿" << x << "不能插入" << endl;return FALSE;}for (int i = size - 1; i >= 0; --i)  //------------------>從最後一個元素到第一個元素依次往後移動一個位置base[i+ 1] = base[i];base[0] = x;size++;return FALSE;}void show_list(){for (int i = 0; i < size; ++i)cout << base[i] << " ";cout << endl;}Status pop_back(Type &x)//將刪除的元素存放在x中,以備不時之需{if (IsEmpty()){cout << "空間已空,不能刪除" << endl;return FALSE;}x = base[--size];return TRUE;}Status pop_front(Type &x){if (IsEmpty()){cout << "空間已空,不能刪除" << endl;return FALSE;}x = base[0];//將刪除的元素儲存在x中,以備不時之需for (int i = 1; i <= size - 1; ++i)    //--------------->從第二個元素到最後一個元素,依次覆蓋前一個元素base[i - 1] = base[i];size--;return TRUE;}Status insert_pos(int pos,const Type &x){if (pos < 0 || pos >= size){cout << "插入位置無效" << endl;return FALSE;}if (IsFull()){cout << "空間已滿" << x << "不能插入" << endl;return FALSE;}for (int i = size - 1; i >= pos; --i)//--------------->從最後一個元素到所插入的位置的元素依次往後移動一個位置,為所要插入的元素留出位置base[i + 1] = base[i];base[pos] = x;size++;return TRUE;}Status delete_pos(int pos,Type &x){if (pos < 0 || pos >= size){cout << "刪除位元置無效" << endl;return FALSE;}if (IsEmpty()){cout << "空間已空,不能刪除" << endl;return FALSE;}x = base[pos];for (int i = pos + 1; i < size; ++i)//從刪除位元置後面的第一個元素開始依次覆蓋前一個元素base[i - 1] = base[i];size--;return TRUE;}int find(const Type &x){for (int i = 0; i < size; ++i){if (base[i] == x)return i;}return -1;}void sort()//冒泡排序{for (int i = 0; i < size - 1; ++i)//排序size-1次{for (int j = 0; j < size - 1 - i; ++j){if (base[j] > base[j + 1]){Type tmp = base[j];base[j] = base[j + 1];base[j + 1] = tmp;}}}}void reserve()//左右對稱位置交換{int left = 0;int right = size - 1;while (left < right){Type tmp = base[left];base[left] = base[right];base[right] = tmp;left++;right--;}}Status insert_val(const Type &x){if (IsFull()){cout << "空間已滿" << x << "不能按值插入" << endl;return FALSE;}sort();for (int i = 0; i < size; ++i){if (base[i] > x)//存在比所要插入元素大的元素,在該位置插入它{insert_pos(i, x);return TRUE;}}base[size++] = x;//不存在比所要插入元素大的元素,在最後位置插入它return TRUE;}/*Status insert_val(const Type &x)//用while代替for{if (IsFull()){cout << "空間已滿" << x << "不能按值插入" << endl;return FALSE;}sort();int i = 0;while(i<size && x > base[i]){i++;}insert_pos(i,x);return TRUE;}*/Status delete_val(const Type &x){int n = find(x);if (n == -1){cout <<x<< "不存在,無法刪除" << endl;return FALSE;}Type item;delete_pos(n, item);return TRUE;}void clear(){size = 0;}};#endif
main.cpp

#include"SeqList.h"int main(){SeqList<int> mylist;int item;int n;int select = 1;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] reserve   *" << endl;cout << "*[13] destory            [14] clear     *" << endl;cout << "*[0] quit_system         [0] quit_system*" << 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(item);break;case 5:mylist.pop_front(item);break;case 6:cout << "請輸入要插入的元素:";cin >> item;mylist.insert_val(item);break;case 7:cout << "請輸入要插入的位置:";cin >> n;cout << "請輸入要插入的元素:";cin >> item;mylist.insert_pos(n,item);break;case 8:cout << "請輸入要尋找的元素:";cin >> item;cout << mylist.find(item) << endl;break;case 9:cout << "請輸入要刪除的位置:";cin >> n;mylist.delete_pos(n,item);break;case 10:cout << "請輸入要刪除的元素:";cin >> item;mylist.delete_val(item);break;case 11:mylist.sort();break;case 12:mylist.reserve();break;case 14:mylist.clear();break;default:break;}}system("pause"); return 0;}




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.