线性结构之数组实现
admin
2023-08-03 07:45:59
0

#include

#include

typedef struct

{

int *pArr;

int length;//数组最大容量

int cnt;//当前数组有效个数

}SqList;

void init_arr(SqList *,int length);

void destroy_arr();

void remove_arr(SqList *,int,int *);

void append_arr(SqList *,int);

void insert_arr(SqList *,int,int);

void get_arr();

void replace_arr();

void travel_arr(SqList *);

void reverse_arr(SqList *);

void sort_arr(SqList *);

int size();

bool isEmpty(SqList *);

bool isFull(SqList *);

void main()

{

//我们刚开始的时候,这样写SqList arr,代替SqList * arr,

//因为这样的好处是到时候要使用arr变量,可以在此使用*arr,否则没有余地了。

SqList arr;

//初始化这个线性表。

init_arr(&arr,6);

//遍历这个线性表。

travel_arr(&arr);

//追加元素到线性表。

printf("开始追加元素到线性表中\n");

append_arr(&arr,2);

append_arr(&arr,4);

append_arr(&arr,0);

//遍历这个线性表

travel_arr(&arr);

//插入元素到线性表

insert_arr(&arr,1,3);

//遍历这个线性表

travel_arr(&arr);

//删除元素

int val;

remove_arr(&arr,2,&val);

//遍历这个线性表

travel_arr(&arr);

//倒置这个线性表

reverse_arr(&arr);

//遍历这个线性表

travel_arr(&arr);

printf("开始排序\n");

//排序这个线性表

sort_arr(&arr);

//遍历这个线性表

travel_arr(&arr);


}

void init_arr(SqList *arr,int length)

{

arr->pArr=(int *)malloc(sizeof(int)*length);

if(NULL==arr->pArr)

{

printf("动态内存分配失败");

exit(-1);

}

else

{

arr->length=length;

arr->cnt=0;

}

}

bool isEmpty(SqList *arr)

{

if(arr->cnt==0)

return true;

else

return false;

}

void travel_arr(SqList * arr)

{

//判断现行表是否为空,提示用户线性表为空

if(isEmpty(arr))

printf("当前线性表为空");

else

{

//遍历线性表

for(int i=0;icnt;i++)

printf("%d ",arr->pArr[i]);

printf("\n");

}

}

void append_arr(SqList *arr,int temp)

{

if(isFull(arr))

{

printf("线性表已满,无法再继续追加");

}

else

{

arr->pArr[arr->cnt]=temp;

arr->cnt++;

}


}

bool isFull(SqList *arr)

{

if(arr->cnt==arr->length)

return true;

else

return false;

}

//pos代指下标

void insert_arr(SqList *arr,int pos,int temp)

{

if(isFull(arr))

{

printf("线性表已满,无法插入");

}

else

{

for(int i=arr->cnt-1;i>=pos;i--)

{

arr->pArr[i+1]=arr->pArr[i];

}

arr->pArr[pos]=temp;

arr->cnt++;

}

}

void remove_arr(SqList *arr,int pos,int *val)

{

if(isEmpty(arr))

{

printf("线性表中元素为空,没有元素");

}

else

{

*val=arr->pArr[pos];

for(int i=pos;icnt-1;i++)

{

arr->pArr[i]=arr->pArr[i+1];

}


arr->cnt--;

}

}

//对称,找到中间的合适的中间点,置换下,即可。一般通过这个线性表的总长度/2来算合适的中间点。

//这个算法可能不太合适。

void reverse_arr(SqList *arr)

{

if(isEmpty(arr))

{

printf("线性表为空,不会产生倒置");

}

else

{

/*

int temp;

for(int i=0;icnt/2;i++)

{

temp=arr->pArr[arr->cnt-1-i];

arr->pArr[arr->cnt-1-i]=arr->pArr[i];

arr->pArr[i]=temp;

}

*/

int temp;

int i=0;

int j=arr->cnt-1;

while(i

{

temp=arr->pArr[j];

arr->pArr[j]=arr->pArr[i];

arr->pArr[i]=temp;

i++;

j--;

}

}

}

//冒泡排序

void sort_arr(SqList *arr)

{

int temp;

for(int i=0;icnt-1;i++)

for(int j=0;jcnt-1-i;j++)

if(arr->pArr[j]>arr->pArr[j+1])

{

temp=arr->pArr[j+1];

arr->pArr[j+1]=arr->pArr[j];

arr->pArr[j]=temp;

}


}


相关内容

热门资讯

南京、苏州、常州倡议:非必要不... 南京、苏州昨晚,今年第9号台风“巴威”(台风级)的中心在浙江台州玉环坎门登陆。受其影响南京已出现大风...
学AI大模型应用开发必备的6个... 工欲善其事,必先利其器。这篇文章整理了一份AI大模型应用开发的学习工具清单,覆盖编程、框架、部署等环...
大湾区航天动力试验 基础设施再... 南方日报讯 7月10日,江门市新会区与临界航天(北京)智能科技有限公司签订火箭动力系统实验基地项目战...
台风“巴威”成陆上巨型洒水车,... 一夜过去,已经登陆上岸的台风“巴威”强度虽减弱为强热带风暴,但环流结构保持完整,体型依旧庞大。“巴威...
励威通讯申请光纤制造用熔融拉锥... 国家知识产权局信息显示,江西励威通讯技术有限公司申请一项名为“一种光纤制造用熔融拉锥机”的专利,公开...
电饭煲触摸键开关失灵修复小技巧 可能是触摸板里有灰尘,导致电饭煲触摸键失灵或者是损坏。解决方法:可以先把电饭煲的电线和电源断开,然后...
油烟机清洗后噪音大怎么回事 1、可能是由于在清洗之后安装不牢固,没有将螺丝固定好就会出现这种问题。2、还有的是因为在清洗过后止逆...
抽油烟机风机开关故障 抽油烟机风机开关故障对于厨房的家庭来说是一样非常棘手的问题,一方面是因为厨房食用油烟较多,长期使用油...
抽油烟机开关自动开怎么办 抽油烟机是我们家居生活中必不可少的电器,但是如果遇到抽油烟机自动开的情况,既浪费了能源,也会造成极大...
新抽油烟机开关没用怎么办 如果新安装的抽油烟机开关没有反应,可能是以下几个原因: 1.电源线没有连接正确。检查一下电源线是否...