C语言数据结构---顺序表(静态)

一、头文件与宏定义

  • 标准输入输出头文件
  • ElemType定义为元素类型int
  • 顺序表静态分配空间长度为6
#include<stdio.h>
#define ElemType int
#define MAXSIZE 6

二、结构体定义

  • 一个存放元素的数组,长度为MAXSIZE
  • 存放长度为len,len可以随着插入数据而改变
typedef struct{
	ElemType data[MAXSIZE];
	int len;
}Sqlist;

三、函数声明

  • 函数的总体思路为“创、销、增、删、改、查”
  • 必要操作:创--初始化、销--销毁、增--增加数据、删--删除数据、改--修改数据、查--查询数据
  • 数据完整性校验:数据表判断是否为空,数据表判断是否为满
  • 转换:人类常识“1”位置与计算机“0”位置的对应转换
void initList(Sqlist &list);	//初始化顺序表 
bool isEmpty(Sqlist &list);		//判断顺序表是否为空 
bool isFull(Sqlist list);		//判断顺序表空间是否已满 
void append(Sqlist &list,ElemType e);	//追加数据 
bool insert(Sqlist &list,int i,ElemType e); //在i位置插入数据e 
void print(Sqlist list);	//遍历数据 
int locateElem(Sqlist list,ElemType e);	//查找某个元素位置
ElemType getElem(Sqlist list,int i); //查找某个元素位置的值
bool deleteElem(Sqlist &list,int i); //删除某个位置的元素 

四、函数体

  • 初始化顺序表
/*
	function:初始化顺序表 
	param:Sqlist
	return:void
*/ 
void initList(Sqlist &list){
	for(int i = 0;i<MAXSIZE;i++){
		list.data[i] = 0;
	} 
	list.len = 0;
}
  • 判断顺序表是否为空
 /**
 	判断顺序表是否为空 
 */
 bool isEmpty(Sqlist list){
 	if(list.len==0){
 		return true;
	 }else{
	 	return false;
	 } 
 } 
  • 判断顺序表空间是否已满
 /**
 	判断顺序表是否已满
 */
 bool isFull(Sqlist list){
 	if(list.len>=MAXSIZE){
 		return true;
	 }else{
	 	return false;
	 }
 }
  • 追加数据
/*
	function:顺序表 追加数据 
	param:Sqlist,ElemType
	return:void
*/ 
void append(Sqlist &list,ElemType e){
	if(list.len<MAXSIZE){
		list.data[list.len] = e;
		list.len++;
		printf("#结果>>>插入一条数据!\n"); 
	}else{
		printf("#结果>>>顺序表已满!\n"); 
		return ;
	}
}
  • 在i位置插入数据e
/*
	function:顺序表 在i位置插入数据 
	param:Sqlist,int,ElemType
	return:bool布尔值 
*/ 
bool insert(Sqlist &list,int i,ElemType e){
 	int index = i -1;	//位置转下标 
 	if(index<0||index>list.len||list.len>=MAXSIZE){//判断小标是否合法,顺序表是否已满 
 		return false;
	 }else{
	 	for(int j=list.len;j>index;j--){	//控制i位置开始的元素往后移动,腾出i位置的空间 
	 		list.data[j] = list.data[j-1];
		 }
		 list.data[index] = e;	//在位置i插入数据e 
		 list.len++;	//顺序表长度加1 
		 return true; 
	 }
 }
  • 遍历数据
/*
	function:顺序表 遍历数据 
	param:Sqlist
	return:void
*/ 
void print(Sqlist list){
	printf("#结果>>>"); 
	for(int i=0;i<list.len;i++){
		printf("%d ",list.data[i]);
	}
}
  • 查找某个元素位置
/**
 	查找元素位置 
 */
 int locateElem(Sqlist list,ElemType e){
 	int index = -1;
 	for(int i=0;i<list.len;i++){
 		if(e == list.data[i]){
 			index = i + 1;
		 }
	 }
	 return index;
 }
  • 查找某个元素位置的值
/**
 	查找某个位置的元素值 
 */
 ElemType getElem(Sqlist list,int i){
 	if(i<1||i>list.len){
 		return -999;
	 }else{
	 	return list.data[i-1];
	 }
 	
 }
  • 删除某个位置的元素
/**
 	删除某个位置的元素 
 */ 
 bool deleteElem(Sqlist &list,int i){
 	int index = i - 1;	//转位置为下标
 	if(index<0||index>list.len){
 		return false;
	 }else{
	 	for(int j=index;j<list.len;j++){
	 		list.data[j] = list.data[j+1];
	 	} 
	 	list.len--;
	 }
	 
 }

五、函数入口

  • 数据表功能化操作
  • 循环控制数据操作
int main(){
	Sqlist list;
	int cmd;
	while(true){
		printf("\n\n--------操作顺序表(静态),最大长度为%d\n",MAXSIZE);
		printf("操作:\n(1.初始化\t2.追加数据\t3.插入数据\t4.遍历数据\t\n5.删除数据\t6.按值查找数据\t7.按位置查找数据)");
		printf("\n请输入操作:");
		scanf("%d",&cmd);
		printf("#############\n"); 
		switch(cmd){
			case 1:
				//初始化顺序表 
				initList(list);
				break;
			case 2:
				//追加数据 
				int appdata;
				printf("输入追加数据的值:");
				scanf("%d",&appdata);
				append(list,appdata);
				break;
			case 3:
				//插入数据 
				int insertdata;
				int insertlocate;
				printf("插入数据:");
				scanf("%d",&insertdata);
				printf("插入的位置:");
				scanf("%d",&insertlocate);
				bool isInsert;
				isInsert = insert(list,insertlocate,insertdata);
				if(isInsert){
					printf("插入成功!");
				}else{
					printf("插入失败,位置选择有问题……");
				}
				break;
			case 4:
				//遍历数据表 
				print(list);
				printf("\n"); 
				break; 
			case 5:
				//删除数据 
				int deletelocate;
				printf("删除数据位置:");
				scanf("%d",&deletelocate);
				deleteElem(list,2);
				break;
			case 6:
				//按值查找 
				int searchvalue;
				int number;
				printf("查找某个值:");
				scanf("%d",&searchvalue);
				number = locateElem(list,searchvalue); 
				printf("元素位置:%d",number);
				break;
			case 7:
				//按序号查找 
				int searchlocate;
				printf("查找序号:");
				scanf("%d",&searchlocate);
				printf("第%d个元素的值为%d",searchlocate,getElem(list,searchlocate));
				break;
			default:
				return -1;
				break;
		}
		printf("\n");
	}
	return 0;
}

六、运行情况

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘先生的u写倒了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值