基本简单的顺序表操作
#include <iostream> using namespace std; #define Maxsize 3 //顺序表结构 C方式 typedef struct SqList_C { int data[Maxsize];//线性表最大长度,大小已定,不用申请内存,直接用 int length;//记录线性表当前长度 }SqList_C; //顺序线性表结构 C++方式 typedef struct SqList { int *data;//线性表最大长度 int length;//记录线性表当前长度 }SqList; //(1)初始化顺序表 C++方式 使用C++引用符号初始化顺序表 int InitSqList(SqList &L); //(1)初始化顺序表 C方式 使用指针方式初始化顺序表 int InitSqList_C(SqList *L); //(2)清空顺序表 int ClearSqList(SqList &L); //(3)获取表长 参数SqList类型变量 int GetLength(SqList &L); //(4)判断是否表空 参数SqList类型变量 int EmptyList(SqList L); //(5)按位查找元素 查找第i个位置的元素 int GetElem(SqList L,int i); //(6)按值查找元素 查找值为e的元素 int LocateElem(SqList L, int e); //(7)顺序表插入元素操作 int SqListInsert(SqList &L, int i, int e); //(8)顺序表删除元素操作 int SqListDelete(SqList &L, int i,int &e); //(9)打印一个顺序表 参数SqList类型变量 void PrintList(SqList L); int main() { //测试数据开始************** SqList L; InitSqList(L); SqListInsert(L, 1, 5); SqListInsert(L, 1, 15); SqListInsert(L, 1, 25); //SqListInsert(L, 1, 25); PrintList(L); ClearSqList(L); SqListInsert(L, 1, 25); SqListInsert(L, 1, 35);
SqListDelete(L, 2, e); PrintList(L); //测试数据结束************** return 0; } //1.C++初始化线性表 int InitSqList(SqList &L) { L.data = new int[Maxsize];//申请内存 L.length = 0;//初始化一个空表 cout << "初始化成功!" << endl; return 1; } //1.C语言初始化线性表 int InitSqList_C(SqList L) { //L.data = (int *)malloc(sizeof(int)*Maxsize); L.length = 0; return 1; } //2.清空顺序表 int ClearSqList(SqList &L) { L.length = 0; cout << "表已清空!" << endl; return 1; } //3.获取表长 int GetLength(SqList L) { cout << "表长为:"<<L.length << endl; return L.length; } //4.判断表是否为空 int EmptyList(SqList L) { if (L.length == 0) { cout << "表空!" << endl; return 1; } else { cout << "表不为空!" << endl; return 0; } } //5.按位查找元素 int GetElem(SqList L, int i) { if (i<1 || i>L.length) return 0; cout << "你查找的元素为:"<<L.data[i-1] << endl; return L.data[i - 1]; } //6.按值查找元素 int LocateElem(SqList L, int e) { int i; for (i = 0; i < L.length; i++) { if (L.data[i] == e) { cout << "你查找的元素:"<<e<<"已找到,位置为第" <<i+1<<"个"<< endl; return i+1; } } return 0; } //7.顺序表插入元素 int SqListInsert(SqList &L, int i, int e) { //本算法实现元素插入,元素为传入的e,插入位置为i int k; //若线性表达到最大 if (L.length == Maxsize) { cout << "the list is full!" << endl; return 0; } //若插入的位置不合法 if (i<1 || i>L.length + 1) { cout << "位置错误!" << endl; return 0; } //若插入的位置不在表尾 if (i <= L.length) { for (k = L.length - 1; k >= i - 1; k--) { L.data[k + 1] = L.data[k];//数据后移一位 } } //新元素插入 L.data[i - 1] = e; //表长度加一 L.length++; return 1; } //8.顺序表删除元素操作 int SqListDelete(SqList &L, int i,int &e) { //本算法实现元素删除,删除的元素的位置为i if (i<1 || i>L.length) { cout << "位置错误!" << endl; return 0; } for (int k = i; k < L.length; k++) { L.data[k - 1] = L.data[k];//从删除的位置开始,后一个覆盖前一个 }
e = L.data[i - 1];
cout << "删除的元素为"<<e<< endl;
L.length--;
return 1; } //9.打印顺序表 void PrintList(SqList L) { if (L.length != 0) { cout << "开始打印线性表:" << endl; for (int i = 0; i < L.length; i++) { cout << "第" << i + 1 << "个元素是:" << L.data[i] << endl; } cout << "打印线性表任务完成!" << endl; } else { cout << "表空!" << endl; } }