线性表--线性存储

  1 #include <iostream>
  2 using namespace std;
  3 //定义线性表结构体
  4 #define SIZE 100
  5 typedef struct SqList {
  6     int *elem;//线性表基地址
  7     int length;//当前长度
  8     int listsize;//当前分配存储容量
  9 }*List;
 10 //初始化
 11 void InitList(SqList &L) {
 12     //分配存储空间
 13     L.elem = (int *)malloc(SIZE * sizeof(int));
 14     if (!L.elem) {
 15         cout << "抱歉,存储空间分配失败!" << endl;
 16         return;
 17     }
 18     //设置表长
 19     L.length = 0;
 20     //设置表的存储容量
 21     L.listsize = SIZE;
 22 }
 23 //插入元素
 24 void InsertList(SqList &L, int a, int j) {
 25     //判断插入位置是否符合条件
 26     if (j<1 || j>L.length + 1) {
 27         cout << "抱歉,要插入的位置不符合条件,插入操作失败!" << endl;
 28         return;
 29     }
 30     //移动后半部分数据
 31     int *q, *p;
 32     q = &(L.elem[j-1]);//q为要插入的位置
 33     for (p = &(L.elem[L.length]); p > q; p--) *p = *(p - 1);
 34     *q = a;
 35     L.length++;
 36     cout << "数据插入成功" << endl;
 37 }
 38 //删除元素
 39 void DeleteList(SqList &L, int j,int &e) {
 40     if (j<1 || j>L.length) {
 41         cout << "所输入元素位置不满足条件,无法进行删除操作" << endl;
 42         return;
 43     }
 44     int *p;
 45     e = L.elem[j - 1];
 46     for (p = &(L.elem[j - 1]); p < &(L.elem[L.length - 1]); p++) *p = *(p + 1);
 47     L.length--;
 48     cout << "数据删除成功" << endl;
 49 }
 50 //销毁线性表
 51 void DestoryList(SqList &L) {
 52     //清空操作
 53     int i;
 54     for (i = 0; i < L.length - 1; i++) L.elem[i] = 0;
 55     L.length = 0;
 56 }
 57 //判断是否为空
 58 bool IsEmpty(SqList &L) {
 59     if (L.length == 0) return true;
 60     else return false;
 61 }
 62 //求线性表长度
 63 int ListLength(SqList &L) {
 64     return L.length;
 65 }
 66 //返回第i个元素的值
 67 int GetElem(SqList &L, int i) {
 68     //判断i是否符合条件
 69     if (i<1 || i>L.length) {
 70         cout << "抱歉,要查找的元素位置不符合条件,查找失败" << endl;
 71         return -1;
 72     }
 73     else return L.elem[i - 1];
 74 }
 75 //查找元素
 76 int FindElem(SqList &L, int e) {
 77     int i;
 78     for (i = 0; i < L.length; i++) {
 79         if (e == L.elem[i]) {
 80             return i;
 81         }
 82     }
 83     return -1;//此元素不存在
 84 }
 85 //返回前驱
 86 int PriorElem(SqList &L, int cur_e) {
 87     //判断是否存在
 88     int i;
 89     i = FindElem(L, cur_e);
 90     if (i == -1) {
 91         cout << "抱歉,该元素不存在!" << endl;
 92         return 0;
 93     }
 94     else if (i == 0) {
 95         cout << "该元素没有前驱元素" << endl;
 96         return 0;
 97     }
 98     else {
 99         int m;
100         m=GetElem(L, i);
101         return m;
102     }
103 }
104 //返回后继
105 int NextElem(SqList &L, int cur_e) {
106     //判断是否存在
107     int i;
108     i = FindElem(L, cur_e);
109     if (i == -1) {
110         cout << "抱歉,该元素不存在!" << endl;
111         return 0;
112     }
113     else if (i == (L.length-1)) {
114         cout << "该元素没有后继元素" << endl;
115         return 0;
116     }
117     else {
118         int m;
119         m=GetElem(L, i);
120         return m;
121     }
122 }
123 int main() {
124     SqList list;
125     int n;
126     int i;
127     InitList(list);
128     for (i = 1; i < 11; i++) InsertList(list, i, i);
129     int m;
130     DeleteList(list, 5,m);
131     cout << "m=" << m << endl;
132     m = ListLength(list);
133     cout <<  "线性表长度为:" << m << endl;
134     m = GetElem(list, 7);
135     cout << "第7个元素的值为" << m << endl;
136     if (IsEmpty(list) == true) cout << "线性表为空" << endl;
137     else cout << "线性表不为空" << endl;
138     return 0;
139 
140 }

本代码并未采用定义类的方式来封装函数,只是单纯定义函数然后调用,本代码目的主要是能够掌握各函数的定义,因此并未定义类

猜你喜欢

转载自www.cnblogs.com/2019-12-10-18ykx/p/12956222.html