#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 5
typedef struct {
int* data;
int length;
}SqList;
//初始化顺序表
void InitList(SqList& L) {
L.data = (int*)malloc(sizeof(int) * MAXSIZE);
L.length = 0;
return;
}
//求表长
int Length(SqList L) {
return L.length;
}
//按值查找
int LocalElem(SqList L, int e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i+1;
}
}
return -1;
}
//按位查找
int GetElem(SqList L, int i) {
if (i<1 || i>L.length)
return -1;
return L.data[i - 1];
}
//插入操作
bool ListInsert(SqList& L, int i, int e) {
if (i<1 || i>L.length+1)
return false;
if (L.length >= MAXSIZE)
return false;
for (int j = L.length; j >= i; j--) {
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length += 1;
return true;
}
//删除操作
bool ListDelete(SqList& L, int i, int& e) {
if (i<1 || i>L.length)
return false;
e = L.data[i - 1];
for (int j = i - 1; j < L.length; j++) {
L.data[j] = L.data[j + 1];
}
L.length -= 1;
return true;
}
//输出操作
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d", L.data[i]);
if (i != L.length - 1) {
printf(" ");
}
}
}
//判空操作
bool Empty(SqList L) {
if (L.length == 0)
return true;
return false;
}
//销毁操作
bool DestroyList(SqList& L) {
free(L.data);
L.length = 0;
return true;
}
int main() {
SqList test;
InitList(test);
printf("表长为%d\n", Length(test));
if (Empty(test)) {
printf("表为空\n");
}
else {
printf("表不为空\n");
}
int e, i;
e = 100, i = 1;
printf("插入元素%d,在List序列号为%d\n", e, i);
if (ListInsert(test, i, e)) printf("插入成功\n"); else printf("插入失败\n");
printf("结果:"); PrintList(test); printf("\n");
e = 105, i = 2;
printf("插入元素%d,在List序列号为%d\n", e, i);
if (ListInsert(test, i, e)) printf("插入成功\n"); else printf("插入失败\n");
printf("结果:"); PrintList(test); printf("\n");
e = -13, i = 3;
printf("插入元素%d,在List序列号为%d\n", e, i);
if (ListInsert(test, i, e)) printf("插入成功\n"); else printf("插入失败\n");
printf("结果:"); PrintList(test); printf("\n");
e = 1054, i = 4;
printf("插入元素%d,在List序列号为%d\n", e, i);
if (ListInsert(test, i, e)) printf("插入成功\n"); else printf("插入失败\n");
printf("结果:"); PrintList(test); printf("\n");
e = 231, i = 5;
printf("插入元素%d,在List序列号为%d\n", e, i);
if (ListInsert(test, i, e)) printf("插入成功\n"); else printf("插入失败\n");
printf("结果:"); PrintList(test); printf("\n");
e = 6100, i = 6;
printf("插入元素%d,在List序列号为%d\n", e, i);
if (ListInsert(test, i, e)) printf("插入成功\n"); else printf("插入失败\n");
printf("结果:"); PrintList(test); printf("\n");
printf("表长为%d\n", Length(test));
printf("\"-13\"的位置在第%d个\n", LocalElem(test, -13));
printf("2号元素为%d\n", GetElem(test, 2));
ListDelete(test, 1, e);
printf("删除一号元素,其值为%d\n", e);
printf("结果:"); PrintList(test); printf("\n");
if (DestroyList(test)) {
printf("销毁表成功\n");
}
else {
printf("销毁表失败\n");
}
return 0;
}
C/C++ 线性表的顺序表示
于 2022-06-04 19:25:25 首次发布