#include<stdlib.h>#include<iostream>using namespace std;
#define MAXSIZE 100#define OVERFLOW -2#define ERROR -1#define OK 1
typedef int Status;typedef int ElemType; // 非整型
// 结点结构体typedef struct { ElemType* elem; int length; // int listsize;}Sqlist;
// 初始化顺序表Status InitList_Sq(Sqlist& L){ L.elem = new ElemType[MAXSIZE]; if (!L.elem) exit(OVERFLOW); L.length = 0; return OK;}
// 销毁顺序表void DestroyList(Sqlist& L){ if (!L.elem) delete[] L.elem;}
// 清空顺序表void ClearList(Sqlist& L){ L.length = 0;}
// 获取顺序表的长度int GetLength(Sqlist L){ return L.length;}
// 判断顺序表是否为空int IsEmpty(Sqlist L){ if (!L.elem) return 1; else return 0;}
/*Status insert(Sqlist& L, int i, ElemType e){ int j; if (i < 1 || i > L.length + 1) return ERROR; if (L.length == MAXSIZE) return OVERFLOW; for (j = L.length - 1; j >= i - 1; j--) L.elem[j + 1] = L.elem[j]; L.elem[i - 1] = e; L.length++; return OK;}*/
// 在 i 处插入元素Status ListInsert_Sq(Sqlist& L, int i, ElemType e){ // 在顺序表L的第 i 个元素之前插入新的元素e if (i < 1 || i > L.length + 1) return ERROR; if (L.length == MAXSIZE) return OVERFLOW; ElemType* p, * q; q = &(L.elem[i - 1]); for (p = &(L.elem[L.length - 1]); p >= q; p--) * (p + 1) = *p; *q = e; L.length++; return OK;}
/*Status insert(Sqlist& L, int i, ElemType e){ if (i < 1 || i > L.length + 1) return ERROR; if (L.length == MAXSIZE) return OVERFLOW; int* p, * q; q = L.elem + i - 1; for (p = L.elem + L.length - 1; p >= q; p--) * (p + 1) = *p; *q = e; L.length++; return OK;}*/
// 获取 i 处元素的值,并将其保存在 e 中Status GetElem(Sqlist L, int i, ElemType& e){ if (i < 1 || i > L.length) return ERROR; e = L.elem[i - 1]; return OK;}
// 在顺序表中查找值为 e 的元素,并返回其位置int Search(Sqlist L, ElemType e) // 多种查找方式{ int i; for (i = 0; L.elem[i] != e && i < L.length; i++); if (i < L.length) return i + 1; else return 0;}
/*int LocateElem(Sqlist L, ElemType e){ // 在顺序表 L 中查找值为 e 的数据元素, 返回其序号 for(i = 0; i < L.length; i ++) if(L.elem[i] == e) return i + 1; return 0;}*/
// 删除顺序表中位置为 i 的元素,并将其值保存在 e 中Status ListDelete(Sqlist &L, int i, ElemType& e) { if (i < 1 || i > L.length) return ERROR; e = L.elem[i - 1]; int j; for (j = i; j < L.length; j++) L.elem[j - 1] = L.elem[j]; L.length--; return OK;}
// 创建顺序表Status Create(Sqlist& L, int n){ int i; if (n < 0) return ERROR; for (i = 0; i < n; i++) cin >> L.elem[i]; L.length = n; return OK;}
// 输出顺序表void OutPut(Sqlist L){ int i; for (i = 0; i < L.length; i++) cout << L.elem[i] << " "; cout << endl;}
int main(){ // 以下为测试代码 Sqlist L; int n, i, e; cout << "请输入顺序表的长度:"; cin >> n; InitList_Sq(L); cout << "请输入数据:"; Create(L, n); cout << "输出数据:"; OutPut(L); cout << "顺序表的长度为:" << GetLength(L) << endl; // 获取顺序表长度 cout << IsEmpty(L) << endl; // 查看顺序表是否为空 cout << "请输入要查找的值:"; cin >> e; cout << e << "所在位置为:" << Search(L, e) << endl; // 查找 cout << "请输入删除值的位置:"; cin >> i; ListDelete(L, i, e); cout << "删除成功! " << "您删除的值为:" << e << endl; cout << "此时的顺序表为:"; OutPut(L); cout << "请输入您插入的位置:"; cin >> i; cout << "请输入您要插入的值:"; cin >> e; cout << ListInsert_Sq(L, i, e) << endl; cout << "此时的顺序表为:"; OutPut(L); cout << "此时顺序表的长度为:" << GetLength(L) << endl; ClearList(L); cout << "此时顺序表的长度为:" << GetLength(L) << endl; DestroyList(L); return 0;}
评论