c语言数据体结构定义与输入,C语言数据结构---顺序表(静态)

一、头文件与宏定义

标准输入输出头文件

ElemType定义为元素类型int

顺序表静态分配空间长度为6

#include#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

判断顺序表是否为空

/**

判断顺序表是否为空

*/

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>>插入一条数据!\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

查找某个元素位置

/**

查找元素位置

*/

int locateElem(Sqlist list,ElemType e){

int index = -1;

for(int i=0;i

查找某个元素位置的值

/**

查找某个位置的元素值

*/

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

五、函数入口

数据表功能化操作

循环控制数据操作

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;

}

六、运行情况

aaea83c41954e6a488fe147b7af2d783.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值