线性表的基本操作

本文介绍了如何使用C++编程语言实现顺序表的操作,包括初始化列表、获取元素、插入元素、删除元素以及相关函数的定义和调用。

(残血版)

// 引入标准输入输出库,用于基本的输入输出操作  
#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;  
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值