以顺序表作存储结构,实现线性表的创建、插入。 顺序表的类型描述 #define MAXSIZE 10 // MAXSIZE为最大数据元素数目 typedef int ElemType; typedef struct { ElemType *elem; int length; } SqList; 输入格式: 输入分三行 第一行 元素个数 第二行 元素的值。元素间以空格分隔。 第三行 待插入的位置和元素值 具体格式参看输入样例 输出格式: 输出分两行 第一行 插入前的线性表 第二行 插入后的线性表。 如因插入位置错误失败,输出Insert position error! 如因为表满插入失败,输出OVERFLOW! 具体格式参看输出样例 输入样例: 5 1 3 5 7 9 3 4 输出样例: Before:(1,3,5,7,9) After:(1,3,4,5,7,9) 输入样例: 5 1 3 5 7 9 7 10 输出样例: Before:(1,3,5,7,9) Insert position error! 输入样例: 10 1 2 3 4 5 6 7 8 9 10 6 7 输出样例: Before:(1,2,3,4,5,6,7,8,9,10) OVERFLOW!
时间: 2024-01-03 18:04:01 浏览: 37
线性表的顺序存储结构实现.
以下是C++的代码实现:
```c++
#include <iostream>
using namespace std;
#define MAXSIZE 10 // MAXSIZE为最大数据元素数目
typedef int ElemType;
typedef struct {
ElemType *elem; // 存储空间基址
int length; // 当前长度
} SqList;
bool InitList(SqList &L, int n) {
L.elem = new ElemType[MAXSIZE]; // 动态分配空间
if (!L.elem) { // 分配失败
return false;
}
L.length = n;
for (int i = 0; i < n; i++) {
cin >> L.elem[i];
}
return true;
}
void PrintList(SqList L) {
cout << "Before:(";
for (int i = 0; i < L.length; i++) {
cout << L.elem[i];
if (i < L.length - 1) {
cout << ",";
}
}
cout << ")" << endl;
}
bool ListInsert(SqList &L, int i, ElemType 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.elem[j] = L.elem[j - 1]; // 将第i个元素及之后的元素后移
}
L.elem[i - 1] = e; // 插入新元素
L.length++; // 长度加1
return true;
}
int main() {
SqList L;
int n, i, e;
cin >> n;
if (InitList(L, n)) {
cin >> i >> e;
if (ListInsert(L, i, e)) {
PrintList(L);
cout << "After:(";
for (int j = 0; j < L.length; j++) {
cout << L.elem[j];
if (j < L.length - 1) {
cout << ",";
}
}
cout << ")" << endl;
} else {
if (i < 1 || i > L.length + 1) {
cout << "Insert position error!" << endl;
} else {
cout << "OVERFLOW!" << endl;
}
PrintList(L);
}
}
delete[] L.elem; // 释放存储空间
return 0;
}
```
阅读全文