C++ 线性表实现:初始化、销毁、清空、判断空、获取长度、获取元素、获取位置、求前驱、求后继、插入、删除、显示
我可以帮你实现这个线性表。以下是基于C++的代码实现:
#include <iostream>
using namespace std;
// 线性表的最大长度
const int MAX_SIZE = 100;
// 定义线性表结构
typedef struct {
int data[MAX_SIZE]; // 存储元素的数组
int length; // 线性表长度
} List;
// 初始化线性表
void initList(List &list) {
list.length = 0;
}
// 销毁线性表
void destroyList(List &list) {
list.length = 0;
}
// 清空线性表
void clearList(List &list) {
list.length = 0;
}
// 判断线性表是否为空
bool isEmpty(List list) {
return list.length == 0;
}
// 求线性表长度
int getLength(List list) {
return list.length;
}
// 获取线性表中指定位置的元素
int getElement(List list, int index) {
if (index < 0 || index >= list.length) {
cout << '索引越界' << endl;
return -1;
}
return list.data[index];
}
// 获取线性表元素的位置
int getIndex(List list, int element) {
for (int i = 0; i < list.length; i++) {
if (list.data[i] == element) {
return i;
}
}
return -1; // 未找到元素
}
// 求线性表中指定元素的前驱
int getPredecessor(List list, int element) {
int index = getIndex(list, element);
if (index == -1 || index == 0) {
cout << '无前驱' << endl;
return -1;
}
return list.data[index-1];
}
// 求线性表中指定元素的后继
int getSuccessor(List list, int element) {
int index = getIndex(list, element);
if (index == -1 || index == list.length-1) {
cout << '无后继' << endl;
return -1;
}
return list.data[index+1];
}
// 在线性表指定位置插入元素
void insertElement(List &list, int index, int element) {
if (index < 0 || index > list.length) {
cout << '索引越界' << endl;
return;
}
if (list.length == MAX_SIZE) {
cout << '线性表已满' << endl;
return;
}
for (int i = list.length-1; i >= index; i--) {
list.data[i+1] = list.data[i];
}
list.data[index] = element;
list.length++;
}
// 删除线性表指定位置的元素
void deleteElement(List &list, int index) {
if (index < 0 || index >= list.length) {
cout << '索引越界' << endl;
return;
}
for (int i = index; i < list.length-1; i++) {
list.data[i] = list.data[i+1];
}
list.length--;
}
// 显示线性表
void displayList(List list) {
cout << '线性表中的元素为: ';
for (int i = 0; i < list.length; i++) {
cout << list.data[i] << ' ';
}
cout << endl;
}
int main() {
List list;
initList(list);
int code;
while (true) {
cout << '请输入操作代码:';
cin >> code;
if (code < 0) {
break;
}
switch(code) {
case 1: {
initList(list);
cout << '线性表已初始化' << endl;
break;
}
case 2: {
destroyList(list);
cout << '线性表已销毁' << endl;
break;
}
case 3: {
clearList(list);
cout << '线性表已清空' << endl;
break;
}
case 4: {
bool empty = isEmpty(list);
if (empty) {
cout << '线性表为空' << endl;
} else {
cout << '线性表不为空' << endl;
}
break;
}
case 5: {
int length = getLength(list);
cout << '线性表长度为: ' << length << endl;
break;
}
case 6: {
int index;
cout << '请输入要获取元素的位置:';
cin >> index;
int element = getElement(list, index);
cout << '位置为 ' << index << ' 的元素为: ' << element << endl;
break;
}
case 7: {
int element;
cout << '请输入要获取位置的元素:';
cin >> element;
int index = getIndex(list, element);
if (index != -1) {
cout << '元素 ' << element << ' 的位置为: ' << index << endl;
} else {
cout << '元素 ' << element << ' 不存在' << endl;
}
break;
}
case 8: {
int element;
cout << '请输入要获取前驱的元素:';
cin >> element;
int predecessor = getPredecessor(list, element);
if (predecessor != -1) {
cout << '元素 ' << element << ' 的前驱为: ' << predecessor << endl;
}
break;
}
case 9: {
int element;
cout << '请输入要获取后继的元素:';
cin >> element;
int successor = getSuccessor(list, element);
if (successor != -1) {
cout << '元素 ' << element << ' 的后继为: ' << successor << endl;
}
break;
}
case 10: {
int index, element;
cout << '请输入要插入的位置和元素:';
cin >> index >> element;
insertElement(list, index, element);
cout << '插入成功' << endl;
break;
}
case 11: {
int index;
cout << '请输入要删除的元素的位置:';
cin >> index;
deleteElement(list, index);
cout << '删除成功' << endl;
break;
}
case 12: {
displayList(list);
break;
}
default: {
cout << '无效的操作代码' << endl;
break;
}
}
}
return 0;
}
这段代码实现了一个简单的线性表,可以根据不同的操作代码执行相应的操作。例如,输入代码"1"可以初始化线性表,输入代码"5"可以求线性表的长度,输入代码"12"可以显示线性表中的元素等。
原文地址: https://www.cveoy.top/t/topic/bqij 著作权归作者所有。请勿转载和采集!