数据结构的顺序表操作集

按照题目来讲比较好,如题:

本题要求实现顺序表的基本操作集,如初始化、查找、插入、删除等操作。

稍微说一下,这几个操作是非常非常重要的,希望你们看完我的代码可以自己思考一下为什么要这样,为什么会这样,原理到底是什么呢?

函数接口定义:

List MakeEmpty(); 
void PrintL(List L);
Position Find( List L, ElementType X );
bool Insert( List L, ElementType X, int i);
bool Delete( List L, int i);

这个是题目给出的函数,分别是顺序表的初始化,打印顺序表,查找数据的位置并返回下标,插入和删除。

然后呢,其中List结构定义如下:

typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

最后是要求:

各个操作函数的定义为:

(1)List MakeEmpty():创建并返回一个空的线性表。

(2)void PrintL(List L):顺序打印顺序表L里面的数据元素。打印要求:“顺序表的值为:”(按顺序打印顺序表中的数据元素,每个数据元素之后有一个空格,打印结束之后打印换行符)

(3)Position Find( List L, ElementType X ):在线性表L中查找X,若找到,则返回线性表中X的位置;若找不到则返回ERROR。

(4)bool Insert( List L, ElementType X, int i ):将X插入位序i并返回true。若空间已满,则打印“顺序表满,无法插入”并返回false;如果参数i指向非法位置,则打印“插入位置不合法”并返回false。

(5)bool Delete( List L, int i):将位序为i的元素删除并返回true。若参数i指向非法位置,则打印“位序i不存在元素”(其中i是参数值)并返回false。

具体代码如下:

List MakeEmpty(){
	List L;
	L=(List)malloc(sizeof(struct LNode));
	L->Last=-1;
	return L; 
} 

void PrintL(List L){
	int i=0;
	printf("顺序表的值为:"); 
	for(;i<=L->Last;i++){
		printf("%d ",L->Data[i]);
	}
	printf("\n");
}

Position Find( List L, ElementType X ){
	int a=L->Last;
	int b=0;
	for(int i=0;i<=a;i++){
		if(L->Data[i]==X){
			b=1;
			return i;
		}
	}
	return ERROR;
}

bool Insert( List L, ElementType X, int i){
	if(L->Last==MAXSIZE-1){
		printf("顺序表满,无法插入\n");
		return false;
	}
	if(i<1||i>MAXSIZE){
		printf("插入位置不合法\n");
		return false;
	}
	int a;
	i=i-1;
	for(a=L->Last;a>=i;a--){
		L->Data[a+1]=L->Data[a];
	}
	L->Data[i]=X;
	L->Last++;
	return true;
}


bool Delete( List L, int i){
	if(i<1||i>L->Last+1){
		printf("位序%d不存在元素\n",i);
		return false;
	}
	i=i-1;
    int a;

	for(a=i;a<L->Last;a++){
		L->Data[a]=L->Data[a+1];
	}
	L->Last--;
	return true;
	
}

这种写法比较基础,有些书本差不多就是这样的,肯定还有更好的代码,希望你们的补充

一些细节问题可以留言的0.0

好久没更新咯,最近准备大量更新数据结构的题目

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值