数据结构— —线性表的顺序表示和实现

       🎃Hello,大家好,今天我们要做的是线性表的顺序表示和实现。


目录

🎯目的:

🎯内容:

🎯环境:

🎯步骤:

1、顺序表的存储定义。

2、顺序表的初始化,构造一个空的顺序表。

3、从键盘上依次输入21、18、30、75、42、56,创建顺序表。

4、输出顺序表中的各元素值。

5、要求如果分别在顺序表的第3个位置和第9个位置插入数据时,能够给出插入成功或失败的信息,并输出顺序表中的各元素值。

6、要求如果删除顺序表中的第6个数据元素和第8个数据元素,能够针对不同情况给出删除成功或失败的信息,并输出单链表中的各元素值。

7、要求如果取顺序表中的第5个数据元素和第7个数据元素时,可以给出对应的提示信息,如果能取到,请输出该值。

8、查找35,42是否在顺序表中,查找成功返回其位置信息,否则返回0。

🎯 完整代码:


🎯目的:

1、熟悉VC环境的使用以及程序的输入,编辑,调试,运行的全过程。

2、掌握线性表的顺序结构的静态及操作特点。

3、掌握线性表的顺序结构的静态存储和常见操作在C语言环境中的实现方法。


🎯内容:

1、实现顺序表的定义并创建顺序表。

2、实现线性表顺序存储结构下元素的插入操作。

3、实现线性表顺序存储结构下元素的删除操作。

4、实现线性表顺序存储结构下取元素操作。


🎯环境:

TC或VC++。


🎯步骤:

🎐1、顺序表的存储定义。

typedef struct { //定义顺序表

ElemType *elem;

int length;

} SqList;

🎐2、顺序表的初始化,构造一个空的顺序表。

Status InitList(SqList &L) //创建顺序表

{}

bb7639253f794668ab1bb910203b1081.png

🎐3、从键盘上依次输入21、18、30、75、42、56,创建顺序表。

void InputList(SqList &L, int n)

//输入顺序表的内容(此函数也可以为void InputList(SqList &L),可根据实际情况编写)

{}

1c4dba0daa60476fa370962f59f0722c.png

🎐4、输出顺序表中的各元素值。

void OutputList(SqList L) //输出顺序表中各元素的值

{}

698c3c2f73e34d04b3c22b446b5ab286.png

🎐5、要求如果分别在顺序表的第3个位置和第9个位置插入数据时,能够给出插入成功或失败的信息,并输出顺序表中的各元素值。

Status ListInsert(SqList &L, int i, ElemType e)

{}

e79bc35da55448239423054e26034c83.png

🎐6、要求如果删除顺序表中的第6个数据元素和第8个数据元素,能够针对不同情况给出删除成功或失败的信息,并输出单链表中的各元素值。

Status ListDelete(SqList &L, int i)

{}

0f39bf49f5d842759158a0c3784694c4.png

🎐7、要求如果取顺序表中的第5个数据元素和第7个数据元素时,可以给出对应的提示信息,如果能取到,请输出该值。

Status GetElem(SqList L, int i, ElemType &e)

{}

7b6ad75792f24882adbccf01d98eadb6.png

🎐8、查找35,42是否在顺序表中,查找成功返回其位置信息,否则返回0。

int LocateElem(SqList L, ElemType e)

{}

e64ead01a6b146ccbca340aa9fb73f1f.png


🎯 完整代码:

#include "iostream"
using namespace std;
#define ERROR 0
#define OVERFLOW -1
#define MAX 50
#define OK 1
typedef int Status;
typedef struct{//定义顺序表 
	int *elem;
	int length;
}SqList;
Status InitList(SqList &L){//创建顺序表 
	L.elem=new int[MAX];//为顺序表分配大小为MAX的数组空间 
	if(!L.elem)
		return OVERFLOW;//验证分别配空间是否成功 
	L.length=0;//表长设置为0
	return OK; 
}
void InputList(SqList &L,int n){//输入表中的内容 
	for(int i=0;i<n;i++){
		cin>>L.elem[i];
		L.length++;
	}
}
void OutputList(SqList L){//输出表中的值
	cout<<"表中的值为:";
	for(int i=0;i<L.length;i++){
		printf("%-3d ",L.elem[i]);
	} 
	cout<<'\n';
}
Status ListInsert(SqList &L,int i,int e){//元素插入
//可插入的位置1<=i<=L.length+1
	if(i<1||i>L.length+1)
		return ERROR;//表示i的值不合法
	if(L.length==MAX)
		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++; //长度加1
	return OK; 
}
Status ListDelete(SqList &L,int i){//元素的删除
//可删除的位置1<=i>=L.length
	if(i<1||i>L.length)
		return ERROR;
	for(int j=i-1;j<L.length;j++)
		L.elem[j]=L.elem[j+1];//从第i+1个元素往前移 
	L.length--; //长度减一 
	return OK;
}
Status GetElem(SqList L,int i,int &e){//取出表中的值
 //可取的位置1<=i<=L.length
 	if(i<1||i>L.length)
		return ERROR;//表示i的值不合法
	e=L.elem[i-1];//将第i个值付赋给了e 
	return OK;
}
int LocateElem(SqList L, int e){//查找值的位置
	 for(int i=0;i<L.length;i++){
	 	if(L.elem[i]==e)
	 		return i+1;
	}
	return 0; //查找失败 
} 
int main(){
	SqList L;
	int n,choose,t,i,e;
	printf("1.创建顺序表\n");
	printf("2.输入\n");
	printf("3.输出\n");
	printf("4.插入\n");
	printf("5.删除\n");
	printf("6.取值\n");
	printf("7.查找\n");
	printf("0.退出\n");
	cout<<"请输入您的选择:";
	cin>>choose;
	while(1){//一直循环,直到用break打破为止 
		if(choose==0){
			cout<<"您已退出!\n";
			break;
		}
		switch(choose){//判断用户的选择
			case 1:
				 if(InitList(L)==1)
				 	cout<<"顺序表创建成功!\n";
				else
					cout<<"顺序表创建失败!\n";
				break;
			case 2:
				cout<<"请您输入要输入元素的个数:";
				cin>>n;
				InputList(L,n);
				break;
			case 3:
				OutputList(L);
				break;
			case 4:
				cout<<"请输入您要插入的位置:";
				cin>>i;
				cout<<"请输入您要在此处插入的值:";
				cin>>e; 
				t=ListInsert(L,i,e);
				if(t!=1)
					cout<<"插入位置不合法!!!\n";
				else
					OutputList(L);
				break;
			case 5:
				cout<<"请输入您要删除的位置:";
				cin>>i;
				t=ListDelete(L,i);
				if(t!=1)
					cout<<"删除位置不合法!!!\n";
				else
					OutputList(L);
				break;
			case 6:
				cout<<"请输入您要取的值的位置:";
				cin>>i;
				t=GetElem(L,i,e);
				if(t!=1)
					cout<<"取值位置不合法\n";
				else
					cout<<"第"<<i<<"个元素是"<<e<<endl; 
				break;
			case 7:
				cout<<"请输入您要查找的值:";
				cin>>e;
				t=LocateElem(L,e);
				if(t==0)
					cout<<"您查找的值不在表中\n";
				else
					cout<<"元素"<<t<<"的位置在第"<<t<<"个"<<endl;
				break;
			default:
					cout<<"您的输入有误"<<endl; 	
		}
		cout<<"请输入您的选择:";
		cin>>choose;
	}
	return 0;
}

        🎃以上是本期的所有内容了,请大佬多多在评论区指正!

        🌞我是IT闫,期待你的关注!!!❤️

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y小夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值