码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构-线性表

时间:2016-09-21 23:08:40      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

线性表(List):n个数据的有限集合

1. 顺序结构:用一段地址连续的储存单元依次存储线性表的数据元素

结构代码:

1 #define MAXSIZE 20 //储存空间初始分配量    
2 typedef int ElemType;  //根据实际情况,这里假设为int
3 typedef struct
4 {
5     ElemTyoe data[MAXSIZE] ; //数组存储数据元素,最大值为MAXSIZE
6     int length=0; //线性表长度
7 }SqList;

三个属性:存储空间的起始位置(数组data)线性表的最大存储容量(最大长度MAXSIZE)、线性表的当前长度(length)

地址计算:对于第i个元素ai的存储位置可以由a1推出,若一个数据元素占用c个存储单元,则LOC(ai)= LOC( a1)+( i-1 )*c

获取元素:

1 //操作:用e返回L中第i个元素的值
2 typedef int Status
3 Status GetElem(Sqlist l, int i, ElemType *e)
4 {
5     if(L.length==0||i<1||i>L.length)
6         return 0;
7     *e=L.data[i-1];
8     return 1;
9 }

插入元素:

 1 //操作:在L中第i个位置之前插入新的元素e
 2 Status ListInsert(Sqlist *L,int i,ElemType e)
 3 {
 4     int k;
 5     if(L->length==MAXSIZE)//线性表已满
 6         return 0;
 7     if(i<1||i>L->length+1)//当i不在范围
 8         return 0;
 9     if(i<=L->length)//插入位置以后后移
10     {
11         for(k=L->length-1;k>=i-1;k--)
12             L->data[k+1]=L->data[k];
13     }
14     L->data[i-1]=e;
15     l->length++;
16     return 1;
17 }

删除元素:

 1 //操作:删除L的第i个元素,并用e返回其值
 2 Status ListDelete(Sqlist *L,int i,ElemType *e)
 3 {
 4     int k;
 5     if(L->length==0)//线性表为空
 6         return 0;
 7     if(i<1||i>L->length)//删除位置不正确
 8         return 0;
 9     *e=L->[i-1];
10     if(i<L->length)
11     {
12         for(k=i;k->length;k++)//后继元素前移
13             L->data[k-1]=L->data[k];
14     }
15     L->length--;
16     return 1;
17 }

完整实现:

  1 //顺序链表实现
  2 #include<iostream>
  3 using namespace std;
  4 #define MAXSIZE 20 //储存空间初始分配量    
  5 typedef int ElemType;  //根据实际情况,这里假设为int
  6 typedef struct
  7 {
  8     ElemType data[MAXSIZE] ; //数组存储数据元素,最大值为MAXSIZE
  9     int length=0; //线性表长度
 10 } Sqlist;
 11 Sqlist s;//为求简便输出使用全局变量
 12 //操作:用e返回L中第i个元素的值
 13 typedef int Status;
 14 void print()
 15 {
 16     cout << "Item: ";
 17          for (int i = 0; i < s.length; i++)
 18              cout << s.data[i] <<  ;
 19     cout << "Length: " << s.length << endl;
 20 }
 21 Status GetElem(Sqlist L, int i, ElemType *e)
 22 {
 23     if (L.length == 0 || i < 1 || i > L.length)
 24         return 0;
 25     *e = L.data[i - 1];
 26     return 1;
 27 }
 28 //操作:在L中第i个位置之前插入新的元素e
 29 Status ListInsert(Sqlist *L, int i, ElemType e)
 30 {
 31     int k;
 32     if (L->length == MAXSIZE) //线性表已满
 33         return 0;
 34     if (i < 1 || i > L->length + 1) //当i不在范围
 35         return 0;
 36     if (i <= L->length)
 37     {
 38         for (k = L->length - 1; k >= i - 1; k--)
 39             L->data[k + 1] = L->data[k];
 40     }
 41     L->data[i - 1] = e;
 42     L->length++;
 43     print();
 44     return 1;
 45 }
 46 //操作:删除L的第i个元素,并用e返回其值
 47 Status ListDelete(Sqlist *L, int i, ElemType *e)
 48 {
 49     int k;
 50     if (L->length == 0) //线性表为空
 51         return 0;
 52     if (i < 1 || i > L->length) //删除位置不正确
 53         return 0;
 54     *e = L->data[i - 1];
 55     if (i < L->length)
 56     {
 57         for (k = i; k < L->length; k++) //后继元素前移
 58             L->data[k - 1] = L->data[k];
 59     }
 60     L->length--;
 61     print();
 62     return 1;
 63 }
 64 void list()
 65 {
 66     cout << "Options: "<<endl<< "1.Find"<<endl << "2.Insert"<<endl << "3.Delete"<<endl;
 67 }
 68 int main() {
 69     cout << "The implent of list" << endl;
 70     cout << "length:" << endl;
 71     cin >> s.length;
 72     cout << "The item of list:" << endl;
 73     for (int i = 0; i < s.length; i++)
 74         cin >> s.data[i];
 75     print();
 76     while (1) 
 77     {
 78         int choose;
 79         list();
 80         cin>>choose;
 81         if (choose == 1) {
 82             int elem, i;
 83             cout << "Find:"<<endl;
 84             cin >> i;
 85             GetElem(s, i, &elem);
 86             cout << elem << endl;
 87         }
 88         if (choose == 2) {
 89             int i, e;
 90             cout << "Insert:"<<endl;
 91             cin >> i >> e;
 92             ListInsert(&s, i, e);
 93         }
 94         if (choose == 3) {
 95             int i, e;
 96             cout << "Delete:"<<endl;
 97             cin >> i;
 98             ListDelete(&s, i, &e);
 99             cout << e << "has been deleted." << endl;
100         }
101     }
102 }

 

数据结构-线性表

标签:

原文地址:http://www.cnblogs.com/yueshangzuo/p/5894271.html

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