码迷,mamicode.com
首页 > 编程语言 > 详细

C++数据结构学习之顺序表

时间:2018-02-21 15:52:57      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:数据结构类型   stl   访问   temp   log   pen   ons   私有   src   

顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型。它通常包含三个私有成分,即指向数据数组的头指针、当前表长以及表的实际容量。表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组中的每个元素。其基本结构类型如下图所示:

技术分享图片

从上图可以看到,其基本结构包含一个指向数据数组的头指针,当前表长为5,但是该顺序表实际表的容量有7。

下面附上实现该数据结构的各项操作代码

在C.h文件中存放可能要用到的C++库:

 1 #ifndef _C_H_
 2 #define _C_H_
 3 #include<iostream>
 4 #include<fstream>
 5 #include<iomanip>
 6 #include<cmath>
 7 #include<vector>
 8 #include<list>
 9 #include<stack>
10 #include<queue>
11 #include<deque>
12 #include<string>
13 #include<bitset>
14 #include<algorithm>
15 #include<ctime>
16 #include<cstdarg>
17 #include<assert.h>
18 using namespace std;
19 #endif // _C_H_

在SequenceTable.h存放对应的数据结构类型:

  1 #ifndef _SEQUENCETABLE_H_
  2 #define _SEQUENCETABLE_H_
  3 template<typename T>class STL{
  4 private:
  5     T *elem;   //save the base address of STL
  6     int length;     //save the current length of STL;
  7     int listsize;   //save the opacity of STL
  8 public:
  9     //a function to create k length STL, if k doesn‘t exist, it can use default function to create 1 length STL
 10     STL(int k=1){
 11         elem = new T[k];
 12         length = 0;
 13         listsize = k;
 14     }
 15     //destruct STL
 16     ~STL(){
 17         delete[]elem;
 18     }
 19     int getLength();
 20     int getListsize();
 21     void Insert(int k, int data);   //a function to insert elem in the specific location
 22     void Delete(int k, int data);   //a function to delete elem in the specific location
 23     int getElem(int k);     //get elem in the specific location
 24     int getLocation(int data);
 25     void ListEmpty();
 26     void showSTL();
 27 };
 28 
 29 template<typename T>
 30 int STL<T>::getListsize(){
 31     return listsize;
 32 }
 33 
 34 template<typename T>
 35 int STL<T>::getLength(){
 36     return length;
 37 }
 38 
 39 template<typename T>
 40 void STL<T>::Insert(int k, int data){
 41     //confirm whether the k is reasonable
 42     if(k <= 0 || k > (length+1)){
 43         cout<<"k is unreasonable!"<<endl;
 44     }
 45     int t;     //an empty bottle
 46     //insert data while satisfy this situation
 47     while(length<listsize && k<=length){
 48         if(k<length){
 49             t = elem[k];
 50             elem[k] = data;
 51             data = elem[k+1];
 52             k++;
 53         }
 54         else{
 55             length++;
 56             t = elem[k];
 57             elem[k] = data;
 58             data = elem[k+1];
 59             k++;
 60         }
 61     }
 62     if(k==(length+1)){
 63         if(length<listsize){
 64             length++;
 65             elem[k] = data;
 66         }
 67         else{
 68             listsize++;
 69             length++;
 70             elem[k] = data;
 71         }
 72     }
 73 }
 74 
 75 template<typename T>
 76 void STL<T>::Delete(int k, int data){
 77     //confirm whether the k is reasonable
 78     if(k <= 0 || k > (length+1)){
 79         cout<<"k is unreasonable!"<<endl;
 80     }
 81     int t;     //an empty bottle
 82     //insert data while satisfy this situation
 83     while(k<=length){
 84         if(k<length){
 85             t = elem[k];
 86             elem[k] = elem[k+1];
 87         }
 88         else{
 89             length--;
 90         }
 91     }
 92 }
 93 
 94 template<typename T>
 95 int STL<T>::getLocation(int data){
 96     int i = 0; //consider when the length is 0 but the listsize is 1
 97     while(i<=length){
 98         if(elem[i] == data){
 99             return i;
100         }
101         i++;
102     }
103 }
104 
105 template<typename T>
106 int STL<T>::getElem(int k){
107     if(k<=0 || k>=(length+1)){
108         cout<<"k is unreasonable!"<<endl;
109     }
110     else{
111         return elem[k];
112     }
113 
114 }
115 
116 template<typename T>
117 void STL<T>::ListEmpty(){
118     length = 0;
119 }
120 
121 template<typename T>
122 void STL<T>::showSTL(){
123     for(int i=1;i<=length; i++){
124         cout<<elem[i]<<endl;
125     }
126 }
127 #endif

 

然后再main.cpp文件中实现对该数据结构的调用:

 1 #include "C.h"
 2 #include "SequenceTable.h"
 3 typedef int T;
 4 int main(){
 5     STL<T> L;
 6     for(int i=0; i<5;i++){
 7         L.Insert(i+1, i+1);
 8     }
 9     cout<<L.getLocation(5)<<endl;
10     cout<<L.getLength()<<endl;
11     cout<<L.getListsize()<<endl;
12     L.showSTL();
13     int a = L.getElem(0);
14     L.Delete(5,5);
15     L.showSTL();
16     cout<<L.getLength()<<endl;
17     cout<<L.getListsize()<<endl;
18 }

运行实现:

技术分享图片

C++数据结构学习之顺序表

标签:数据结构类型   stl   访问   temp   log   pen   ons   私有   src   

原文地址:https://www.cnblogs.com/sgatbl/p/8456677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!