数据结构和算法 第一天单向顺序链表C语言实现针对针对零基础,提高逻辑能力,加深对结构体的理解

数据结构和算法 第一天单向顺序链表C语言实现针对针对零基础,提高逻辑能力,加深对结构体的理解,第1张

数据结构第一天 单向顺序链表知多少?
  • 第一部分 图文分析顺序链表【❥(^_-)】
  • 第二部分 代码实现单向顺序链表【❥(^_-)】

第一部分 图文分析顺序链表【❥(^_-)】

顺序表在所有链表当中属于简单的,但是前面的知识对面难度高的是有辅助作用的,所以一定要循序渐进,在图中也有任务,想做的自己尝试,不想做的下一次,我也会分享出来,我们一起把数据结构搞明白

第二部分 代码实现单向顺序链表【❥(^_-)】

其实就是对结构体的 *** 作,看多了,逻辑会加强,以后自己写代码思维敏锐

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

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/742409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存