本文使用C++语言,数组描述线性表的顺序存储结构,编写了较为完整的顺序表项目,现给出C++代码,此代码可运行。
//SqListProject.cpp
//线性表的顺序表示项目
#include <cstdio>
bool ListInsert(int arr[], int i, int e);
bool ListDelete(int arr[], int i, int& e);
int LocateElem(int arr[], int e);
void PrintList(int arr[]);
void PrintMenu();
int n = 10;
int main() {
bool p;
int i, e, k;
int arr[50] = { 4, 3, 2, 1, 5, 6, 7, 8, 9, 10 };
int choice;
while (true) {
PrintList(arr);
PrintMenu();
scanf("%d", &choice);
if (9999 == choice) {
break;
}
switch (choice) {
case 1:
printf("1 在顺序表L的第i个位置插入新元素e\n");
printf("\t输入i和e(i=3,e=20):");
scanf("%d%d", &i, &e);
p = ListInsert(arr, i, e);
if (p) {
printf("\t插入成功\n");
}
else {
printf("\t插入失败\n");
}
break;
case 2:
printf("2 删除顺序表L中第i个位置的元素,用引用变量e返回\n");
printf("\t输入i(i=6):");
scanf("%d", &i);
p = ListDelete(arr, i, e);
if (p) {
printf("\t删除成功,e=%d\n", e);
}
else {
printf("\t删除失败,e=%d\n", e);
}
break;
case 3:
printf("3 在顺序表L中查找第一个元素值等于e的元素,并返回其位序\n");
printf("\t输入e(e=4):");
scanf("%d", &e);
k = LocateElem(arr, e);
printf("\t位序:%d\n", k);
break;
default:
printf("\t错误!请重新输入!\n");
}
}
return 0;
}
bool ListInsert(int arr[], int i, int e) {
if (i<1 || i>n + 1) {
return false;
}
for (int j = n; j >= i; --j) {
arr[j] = arr[j - 1];
}
arr[i - 1] = e;
n++;
return true;
}
bool ListDelete(int arr[], int i, int& e) {
if (i<1 || i>n) {
return false;
}
e = arr[i - 1];
for (int j = i; j < n; ++j) {
arr[j - 1] = arr[j];
}
n--;
return true;
}
int LocateElem(int arr[], int e) {
int i;
for (i = 0; i < n; ++i) {
if (arr[i] == e) {
return i + 1;
}
}
return 0;
}
void PrintList(int arr[]) {
printf("顺序表L:");
for (int i = 0; i < n; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
}
void PrintMenu() {
printf("--------------------------------------------\n");
printf("1 在顺序表L的第i个位置插入新元素e\n");
printf("2 删除顺序表L中第i个位置的元素,用引用变量e返回\n");
printf("3 在顺序表L中查找第一个元素值等于e的元素,并返回其位序\n");
printf("9999 退出程序\n");
printf("--------------------------------------------\n");
}