2023王道C语言督学营(线性表-线性表的顺序存储原理及实现)

线性表是逻辑结构,独立于存储结构

线性表是逻辑结构,它表示元素有一对一的相邻关系
顺序表和链表是存储结构

线性表的顺序存储

在这里插入图片描述
头文件


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
 
#define MaxSize 10
顺序表的定义
//顺序表定义
typedef struct {
	
	int data[MaxSize];//存放顺序表元素的数组
	int length;//顺序表的长度 
//	int size;//顺序表的大小,感觉没必要	

在这里插入图片描述
初始化顺序表[initSqlist()]

//初始化顺序表 
void initSqlist(Sqlist &sqlist){
	    sqlist.length=0;
	    printf("初始化完成,初始单链表长度为%d\n",sqlist.length);
   
}

求表长[Length()]

//求表长
void Length(Sqlist l){
    printf("表长为%d\n",l.length);
元素插入[ListInsert()]
bool ListInsert(Sqlist &sq,int l,int e){
	if(l<1||l>sq.length+1){
		printf("插入位置不合法");
	    return false;
	}
	if(sq.length>=MaxSize){
		printf("存储空间不足");
		return false;
	}
	for (int i=sq.length;i>=l;i--){	
		sq.data[i]=sq.data[i-1];
	}
	sq.data[l-1]=e;
	sq.length++;
	printf("插入成功,插入数据为%d\n",e); 
	return true;
}
元素删除[ListDelete()]
//删除操作 
bool ListDelete(Sqlist &sq,int i,int &e){
	//先判断删除是否合法
	if(i<1||i>sq.length+1){
		printf("删除位置不合法");
		return false; 
	} 
	e=sq.data[i-1];
	for(int j=i-1;j<=sq.length;j++){
		sq.data[j-1]=sq.data[j];
	}
	sq.length--;
	printf("删除成功,删除元素为%d\n",e);
	return true; 
}
元素查找[LocateElem()&&GetElem()]

//按值查找 
void LocateElem(Sqlist sq,int e){
	int flag=-1;
	for(int j=0;j<sq.length;j++){
		if(sq.data[j]==e){
			flag=j;
			break; 
		}
	}
	if(flag!=-1){
		 printf("查找成功,在data[%d]上\n",flag);
	}else{
		printf("查找失败"); 
	}
	  
	
}
//按位操作 
void GetElem(Sqlist sq,int i){
    if(i<1||i>sq.length+1){
		printf("查找位置不合法");
	    
	}else{
		printf("data[%d]上的数值为%d",i,sq.data[i-1]);
	}
	
}

打印顺序表[PrintList()]

//输出操作 
void PrintList(Sqlist sq){
		for(int i=0;i<sq.length;i++){
		printf("data[%d]=%d  ",i,sq.data[i]);
	}
}

主函数

int main(){
	Sqlist list1;
	initSqlist(list1);//初始化 
    ListInsert(list1,1,1);	//插入操作    
    ListInsert(list1,2,2);	//插入操作  
    ListInsert(list1,3,3);	//插入操作  
    ListInsert(list1,4,4);	//插入操作  
    ListInsert(list1,5,5);	//插入操作  
    
	PrintList(list1); //输出表 
	Length(list1);//求表长
	int e=0;
	ListDelete(list1,2,e); 
	PrintList(list1); //输出表 
        Length(list1);//求表长
	LocateElem(list1,2);//按值查找 
	GetElem(list1,3);//按位置查找 
}

输出结果
在这里插入图片描述

动态分配的数组依旧属于顺序存储结构

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值