前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day13嵌入式-数据结构(2022.1.21)

day13嵌入式-数据结构(2022.1.21)

作者头像
天天Lotay
发布2022-12-02 14:34:56
1730
发布2022-12-02 14:34:56
举报
文章被收录于专栏:嵌入式音视频

顺序表:

  1. 设计数据节点(一般使用结构体)
代码语言:javascript
复制
// 声明数据节点

struct seq_node{

    int data;

};
  1. 初始化顺序表(栈空间、堆空间都可以)
代码语言:javascript
复制
    // 1. 初始化顺序表(选用栈空间,结构体数组)

    struct seq_node seq_list[SEQ_SIZE] = {0};

        // 如果使用堆空间(实际使用与栈空间的数组是一模一样的!)

    // struct seq_node *seq_list = calloc(SEQ_SIZE, sizeof(struct seq_node));
  1. 数据操作
  2. 遍历(打印所有的数据)
  3. 增(将数据增加到顺序表中)

顺序表

代码语言:javascript
复制
#include <stdio.h>

#define SEQ_SIZE 10

// 声明数据节点
struct seq_node{
	int data;
};

// 遍历显示顺序表所有有效数据
void seq_show(struct seq_node *seq_list);
// 将该正数存放到顺序表中
void seq_add(int new_data, struct seq_node *seq_list);
// 将该数从顺序表中删除
void seq_del(int del_data, struct seq_node *seq_list);


// 当前数据总数
int g_sum=0;

int main()
{
	// 1. 初始化顺序表(选用栈空间,结构体数组)
	struct seq_node seq_list[SEQ_SIZE] = {0};
		// 如果使用堆空间(实际使用与栈空间的数组是一模一样的!)
	// struct seq_node *seq_list = calloc(SEQ_SIZE, sizeof(struct seq_node));

	// 2.数据操作
	int cmd;
	while(1)
	{
		printf("Pls Input: ");
		scanf("%d", &cmd); while(getchar()!='\n');
		if(cmd>0)
			seq_add(cmd, seq_list);		// 将该正数存放到顺序表中
		else if(cmd<0)
			seq_del(-cmd, seq_list);	// 将该数从顺序表中删除
		
		seq_show(seq_list);			// 遍历显示顺序表所有有效数据
	}

	return 0;
}

// 遍历显示顺序表所有有效数据
void seq_show(struct seq_node *seq_list)
{
	int i;
	for(i=0; i<g_sum; i++)
		printf("%d ", seq_list[i].data);
	printf("\n");
}

// 将该正数存放到顺序表中
void seq_add(int new_data, struct seq_node *seq_list)
{
	// 0.判断当前数据总数是否已满。(限制最大长度)
	if(g_sum >= SEQ_SIZE)
	{
		printf("SEQ_list FULL!!!!\n");
		return;
	}

	// 1.将新数据放入指定位置
	seq_list[g_sum].data = new_data;

	// 2.当前数据总数++
	g_sum++;
}

// 将该数从顺序表中删除
void seq_del(int del_data, struct seq_node *seq_list)
{
	// 0.判断当前顺序表是否为空?提示并结束
	if(g_sum == 0)
	{
		printf("SEQ_list Empty!!!!\n");
		return;
	}

	// 1.循环逐个比对待删除数据del_data
	int pos;
	for(pos=0; pos<g_sum; pos++)
	{
		// 如果找到,提前跳出循环,记录下标pos
		if(seq_list[pos].data == del_data)
			break;
	}
	
	// 如果for循环正常结束,说明没找到。直接提示并结束
	if(pos == g_sum)
	{
		printf("Not Found!\n");
		return;
	}

	// 2.将后面的数据逐个向前覆盖。
	int i;
	// for(i=pos; i<=g_sum-2; i++)
	for(i=pos; i<g_sum-1; i++)
	{
		// 如果不清楚他们的覆盖流程,可以添加printf打印语句,跟踪for循环。
		// printf("2: %d = %d\n", seq_list[i].data, seq_list[i+1].data);
		seq_list[i].data = seq_list[i+1].data;
	}

	// 3.当前数据总数g_sum--
	g_sum--;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档