- 第一部分 图文分析顺序链表【❥(^_-)】
- 第二部分 代码实现单向顺序链表【❥(^_-)】
顺序表在所有链表当中属于简单的,但是前面的知识对面难度高的是有辅助作用的,所以一定要循序渐进,在图中也有任务,想做的自己尝试,不想做的下一次,我也会分享出来,我们一起把数据结构搞明白
第二部分 代码实现单向顺序链表【❥(^_-)】其实就是对结构体的 *** 作,看多了,逻辑会加强,以后自己写代码思维敏锐
#include
#include
#include
#define SQL_NUMB 10
typedef struct sequance_list{
int array[SQL_NUMB];//这个是用来放数据的
int last;//这个是用来记录上面的数组用到第几个元素的
}sql_t;
//函数返回结构体地址【因为这样才能利用里面的数据】
sql_t *request_sequence_list(void)
{
sql_t *new_sql;//定义一个结构体变量
//堆是由程序员自己申请的,所以要自己使用释放函数释放,栈是系统自己释放
new_sql = malloc(sizeof(sql_t));//申请一块结构体大小的内存
if(new_sql == NULL)
{
perror("申请内存失败");
return NULL;
}
new_sql->last = -1;//初始化以下,数组是从0开始保存数据,-1就是没有数据
return new_sql;//返回申请的结构体变量地址
}
//函数功能:销毁顺序链表 参数:结构体地址
void destroy_sequence_list(sql_t *list)
{
free(list);//释放结构体空间
}
bool is_full(sql_t *list)
{
return list->last == SQL_NUMB-1;
}
//函数功能:在顺序链表中插入数据 参数:1:结构体地址 2:插入的十进制数
int insert_data_to_sequence_list(sql_t *list, int insert_data)
{
if(is_full(list))
{
printf("不好依稀呀,表郭满咯\n");
return -1;
}
list->last++;//让记录数组引用的最大下标值+1 【还记得初始化吗 -1+1=0】
list->array[list->last] = insert_data;//list->array[0]=data第一个数,一次类推
}
函数功能:顺序列表遍历 参数:结构体地址
void display_sequence_list_value(sql_t *list)
{
int i;
printf("表格已有数据:");
for(i=0; i<=list->last; i++)//last代表了数组的有效下表
{
printf("%d ", list->array[i]);//可以把数据全部打印出来
}
printf("\n");
}
//函数功能:判断表格是否为空 参数:结构体地址
bool is_empty(sql_t *list)
{
return list->last == -1;//一个数都没有
}
//函数功能:删除表格中的数据 参数:结构体地址
int remove_sequence_list_data(sql_t *list)
{
if(is_empty(list))
{
printf("莫好依稀呀,表郭已经公啦\n");
return -1;
}
list->last--;//否则,每调用一次,删除一个数据
return 0;
}
//本次介绍的是顺序链表,零基础都能看懂,不懂得下方留言
int main(void)
{
int input_value;
sql_t *list;//记得定义一个结构体变量
list = request_sequence_list();//函数返回获得的结构体空间
if(list == NULL)
goto request_mem_err;//申请失败,这就是goto最常用的形式,处理错误
while(1)
{
scanf("%d", &input_value);//输入一个值
if(input_value > 0)//插入数据到表格
{
insert_data_to_sequence_list(list, input_value);//插入数据【正数】
display_sequence_list_value(list);//显示数据
}
else if(input_value < 0)//删除表格的数据
{
remove_sequence_list_data(list);//删除数据【负数】
display_sequence_list_value(list);//显示删除后,剩余的数据
}
else
{
break;
}
}
destroy_sequence_list(list);//销毁顺序链表 在程序结束后
return 0;
request_mem_err:
return -1;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)