C++實現線性表的順序存儲結構


將線性表的抽象數據類型定義在順序表存儲結構下用C++的類實現,由於線性表的數據元素類型不確定,所以采用模板機制。

  1 頭文件seqlist.h
  2 #pragma once
  3 #include <iostream>
  4 const int MaxSize = 100;
  5 template<class T>// 定義模板類
  6 class SeqList
  7 {
  8 public:
  9 
 10     SeqList() { Length = 0; };            // 無參構造函數,建立一個空的順序表
 11     SeqList(T a[], int n);                // 有參構造函數,建立一個長度為n的順序表
 12     ~SeqList() {};                        // 空的析構函數
 13     int leng() { return Length; }        // 求線性表的長度
 14     T get(int i);                        // 按位查找第i個元素
 15     int locate(T x);                    // 按值查找值為x的元素序號
 16     void insert(int i, T x);            // 在第i個位置插入值為x的元素
 17     T Delete(int i);                    // 刪除第i個元素
 18     void printlist();                    // 打印線性表
 19 
 20 private:
 21     T data[MaxSize];
 22     int Length;
 23 
 24 };
 25 
 26 #pragma region 成員函數定義
 27 
 28 template<class T>
 29 inline SeqList<T>::SeqList(T a[], int n)
 30 {
 31     if (n > MaxSize)throw"參數非法";
 32     for (int i = 0; i < n; i++)
 33         data[i] = a[i];
 34     Length = n;
 35 }
 36 
 37 template<class T>
 38 T SeqList<T>::get(int i)
 39 {
 40     if (i<1 || i>Length)throw"查找位置非法";
 41     else return data[i - 1];
 42 }
 43 
 44 template<class T>
 45 int SeqList<T>::locate(T x)
 46 {
 47     for (int i = 0; i < Length; i++)
 48     {
 49         if (data[i] == x)
 50             return i + 1;        
 51     }
 52     return 0;
 53 }
 54 
 55 template<class T>
 56 void SeqList<T>::insert(int i, T x)
 57 {
 58     if (Length >= MaxSize)throw "上溢";
 59     if (i<1 || i>Length + 1)throw "插入位置非法";
 60 
 61     for (int j = Length; j >= i; j--)
 62         data[j] = data[j - 1];
 63     data[i-1] = x;
 64     Length++;
 65 }
 66 
 67 template<class T>
 68 T SeqList<T>::Delete(int i)
 69 {
 70     if (Length == 0)throw"下溢";
 71     if (i<1 || i>Length)throw"位置非法";
 72     T x = data[i - 1];
 73     for (int j = i; j < Length; j++)
 74         data[j - 1] = data[j];
 75     Length--;
 76     return x;
 77 }
 78 
 79 template<class T>
 80 void SeqList<T>::printlist()
 81 {
 82     for (int i = 0; i < Length; i++)
 83         cout << data[i] << endl;
 84 
 85 }
 86 主函數
 87 #include "seqlist.h"
 88 using namespace std;
 89 int main()
 90 {
 91     int arry[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 92         // 三種創建類對象的方法
 93     SeqList<int> seqlist;
 94     SeqList<int> seqlist1(arry,10);
 95     SeqList<int>* seqlist2 = new SeqList<int>(arry, 10);
 96     cout << seqlist1.get(5) << endl;
 97     cout << seqlist2->get(5) << endl;
 98     cout << seqlist1.locate(10) <<endl;
 99     cout << seqlist2->locate(10) << endl;
100     seqlist1.insert(3, 11);
101     seqlist2->insert(4, 12);
102     seqlist1.Delete(1);
103     seqlist2->Delete(1);
104     seqlist1.printlist();
105     seqlist2->printlist();
106 
107     system("pause");
108     return 0;
109 }        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM