今天第一日瞎练,给大家带来一个顺序表的讲解。内容有所借鉴
①顺序表就相当于我们学的数组,但是顺序表有前驱元素和后驱元素,就相当于我们排队一样,大家只需要记住前面的人就可以找到自己的位置。
②但是第一个位置没有前驱元素,最后一个位置没有后驱元素。
③并且我们的长度是动态可变的。
④掌握了更有利于我们今后的学习!!!
#include <stdio.h>
#include <stdlib.h>
typedef struct Link{
int *data; //这里我们创建动态数组
int size,length;//size表示顺序表应有的长度 length表示现有的长度
}Link;
//首先我们对顺序表进行初始化操作
Link *init(int n)
{
Link *link = (Link*)malloc(sizeof(Link));//申请内存空间
link->data = (int*)malloc(sizeof(int)*n);//动态数组申请空间
link->size = n;
link->length = 0;//长度初始化
return link;
}
//顺序表的插入操作
int insert(Link *link,int ind,int val){ //ind下标 val值
//首先判断是否能够插入成功
if(link->size == link->length) return 0;//如果表满了,则插入失败
if(ind>link->length || ind < 0) return 0;//插入的下标大于顺序表的长度或者插入的下标值小于0
if(link == NULL) return 0;//若link为空,则无法插入 because没有空间
//接下来我们可以开始插插插了
for(int i=link->length; i > ind; i--){
link->data[i] = link->data[i-1]; //插入时我们要倒着遍历,让插入的点后的数据 都向后移动一位
printf("输出%d",link->data[i]);
}
link->data[ind] = val; //将空出来的位置插入进去
link->length = link->length + 1; //插入成功后让长度+1
return 1;
}
//顺序表有插入就应当有删除
int delete(Link *link,int ind){
//同理先判断无法删除的情况
if(link == NULL) return 0; //和插入解释一样
if(ind < 0 || ind >= link->length) return 0;
if(link->length == 0) return 0; //没有数据 我去删除谁啊?
for(int i=ind ; i < link->length; i++){
link->data[i] = link->data[i+1]; //让ind后的数据都向前移动一位,覆盖ind的位置
}
link->length = link->length - 1;
return 1;
}
//顺序表的输出
void outPut(Link *link){
printf("顺序表的长度 =%d",link->length);
for(int i=0; i < link->length; i++){
printf(" 插入值 =%d ",link->data[i]);
}
printf("\n");
}
//顺序表的销毁
int clearLink(Link *link){
if(link==NULL) return 0;//若为空,则不需要销毁
free(link->data);//先销毁数据
free(link);//在销毁空间
}
//
int main(){
int n,choose,ind,val;
printf("请输入你理想中顺序表的长度");
scanf("%d",&n);
Link *link = init(n);
do
{
printf("[1]插入\n");
printf("[2]删除\n");
printf("[3]遍历\n");
printf("[4]退出走人\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("请输入插入的位置和插入值\n");
scanf("%d%d",&ind,&val);
insert(link,ind,val);
break;
case 2:
printf("删除请输入删除的位置\n");
scanf("%d",&ind);
delete(link,ind);
break;
case 3:
printf("遍历\n");
outPut(link);
break;
case 4:
printf("退出");
exit(0);
default:
exit(0);
}
}while(choose<5);
return 0;
}**加粗样式**