#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct {
int *elem;
int length;
}SqList;
// 构造一个空的顺序表
bool initList(SqList &L) {
L.elem = new int[MAXSIZE]; // 为顺序表分配一个大小为MAXSIZE的数组空间
if (!L.elem) {
return false;
}
L.length = 0; // 空表长度为0
return true;
}
// 顺序表的取值
bool getElem(SqList L, int i, int &e) {
if (i < 1 || i > L.length) { // 位序不合法
return false;
}
e = L.elem[i-1];
return true;
}
// 在顺序表中查找值为e的数据元素,返回位序
int locateElem(SqList L, int e) {
for (int i = 0; i < L.length; ++i) {
if (L.elem[i] == e) {
return i+1;
}
}
return -1;
}
// 在顺序表中第i个位置插入新元素e
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) { // 第i个位置到第n个位置的元素后移
L.elem[j] = L.elem[j-1];
}
L.elem[i-1] = e;
L.length++; // 表长加1
return true;
}
// 在顺序表中删除第i个位置元素,赋值给e
bool listDelete(SqList &L, int i, int &e) {
if (i < 1 || i > L.length) { // 位序不合理
return false;
}
e = L.elem[i-1];
for (int j = i; j < L.length; ++j) {
L.elem[j-1] = L.elem[j];
}
L.length--; // 表长减1
return true;
}
// 打印顺序表
void printList(SqList L) {
for (int i = 1; i <= L.length; ++i) {
int e;
if (getElem(L, i, e)) {
cout << e << " ";
}
}
cout << endl;
}
int main() {
SqList L;
initList(L);
for (int i = 1; i <= 10; ++i) {
listInsert(L, i, i);
}
printList(L);
cout << endl;
for (int i = 1; i <= 10; ++i) {
cout << "查找" << i << "的位序 : " << locateElem(L, i) << endl;
}
cout << endl;
int e;
for (int i = 1; i <= 5; ++i) {
listDelete(L, 2, e);
cout << "删除第2个元素:" << e << endl;
printList(L);
}
return 0;
}
[数据结构]-顺序表的实现
最新推荐文章于 2022-10-22 21:06:17 发布