(残血版)
// 引入标准输入输出库,用于基本的输入输出操作
#include <stdio.h>
#include <iostream>
// 预处理指令,在程序中定义一个宏,将 MAXSIZE 替换为 100
#define MAXSIZE 100
// 定义函数结果状态代码
// Ok 表示操作成功,ERROR 表示操作失败,OVERFLOW 表示内存溢出
#define Ok 1
#define ERROR 0
#define OVERFLOW -2
// 使用标准命名空间,这样在代码中就不需要每次都使用 std:: 前缀
using namespace std;
// 为 int 类型创建新的名称 Status,用于作为函数返回值类型
typedef int Status;
// 为 int 类型创建新的名称 ElemType,可能用于表示顺序表中的元素类型
typedef int ElemType;
// 定义结构体 SqList,用于表示顺序表
// 结构体包含两个成员:存储空间的基地址 elem 和顺序表的长度 lengrh
typedef struct
{
ElemType *elem; // 存储空间的基地址,指向数组的首元素
int length; // 顺序表的长度
} SqList; // SqList 是结构体的新名字,以后可以用这个名称来声明该类型的变量
// 初始化顺序表的函数
// 参数:顺序表 L 的引用
// 返回值:操作状态,成功为 Ok,失败为 ERROR
Status InitList(SqList &L)
{
// 为顺序表 L 分配一个新的数组空间
L.elem = new ElemType[MAXSIZE]; // 分配数组空间,大小为 MAXSIZE
// 如果内存分配失败(即 new 操作失败),则退出程序并返回 OVERFLOW
if(!L.elem)
exit(OVERFLOW);
// 初始化顺序表的长度为0,表示顺序表为空
L.length = 0;
// 操作成功,返回 Ok
return Ok;
}
// 获取顺序表中某个元素的函数
// 参数:顺序表 L 的引用,要获取的元素的索引 i,以及用于存储获取到的元素的变量 e 的引用
// 返回值:操作状态,成功为 Ok,失败为 ERROR
Status GetElem(SqList &L)
{
int i=0;
ElemType e;
cout << "输入位置序号:";
cin >> i ;
// 如果索引 i 不在有效范围内(即 i 小于1 或者 i 大于顺序表的长度),则返回 ERROR
if(i < 1 || i > L.length){
cout << "索引不在有效范围内"<<endl;
return ERROR;
}
// 从顺序表中获取第 i 个元素,并存储到变量 e 中
e = L.elem[i-1]; // 注意:数组索引是从0开始的,而我们的索引是从1开始的,所以需要减1
cout << "元素的值为" << e <<endl;
// 操作成功,返回 Ok
return Ok;
}
int LocateElem(SqList L)
{
int e=0,i=0;
cout << "输入要查找的元素:";
cin >> e;
for(i=0;i<L.length;i++)
if(L.elem[i]==e)
cout << "元素的序号为:"<< i+1 <<endl;
return i+1;
return 0;
}
Status ListInsert(SqList &L)
{
int i=0,e=0;
cout << "输入要插入的元素的位置:";
cin >> i ;
cout << "输入要插入的元素:";
cin >> e ;
if((i<1)||(i>L.length+1))
{
cout << "i的值不合法" <<endl;
return ERROR;
}
if(L.length==MAXSIZE)
{
cout << "存储空间已满" <<endl;
return ERROR;
}
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
cout << "插入已完成" <<endl;
return Ok;
}
Status ListDelete(SqList &L)
{
int i;
cout << "你要删除元素的序号";
cin >> i ;
if((i<1)||(i>L.length))
cout << "i的值不合法" <<endl;
return ERROR;
for(int j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];
--L.length;
cout << "已完成删除" <<endl;
return Ok;
}
void WriteList(SqList &L)//把元素放入顺序表
{
printf("请输入你要创建的顺序表的长度:");
scanf("%d", &L.length);
printf("请输入%d个你要放入顺序表里的元素:",L.length);
for (int i = 0; i < L.length; i++)
scanf("%d", &L.elem[i]);
cout << "初始化完成" << endl;
}
bool PrintList(SqList &L)//打印顺序表
{
if (!L.elem)
return false;
printf("顺序表里的元素有:");
for (int i = 0; i < L.length; i++)
printf("%d ", L.elem[i]);
printf("\n");
return true;
}
// 主函数,程序的入口点
int main()
{
int a=-1;
cout << "数据结构线性表的顺序操作" << endl;
cout << "菜单" << endl;
cout << "************************" << endl;
cout << "取 值 1" << endl;
cout << "查 找 2" << endl;
cout << "插 入 3" << endl;
cout << "删 除 4" << endl;
cout << "初始化 5" << endl;
cout << "打 印 6" << endl;
cout << "退 出 0" << endl;
cout << "************************" << endl;
SqList L;
InitList(L);
while (true)
{
cin>>a;
switch (a)
{
case 1:GetElem(L);break;
case 2:LocateElem(L);break;
case 3:ListInsert(L);break;
case 4:ListDelete(L);break;
case 5:WriteList(L);break;
case 6:PrintList(L);break;
case 0:return 0;break;
default:cout << "输入有误!" << endl;
}
}
// 程序执行成功,返回0表示正常退出
return 0;
}
本文介绍了如何使用C++编程语言实现顺序表的操作,包括初始化列表、获取元素、插入元素、删除元素以及相关函数的定义和调用。
2688

被折叠的 条评论
为什么被折叠?



