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

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

顺序表:


  1. 设计数据节点(一般使用结构体)


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


  1. 初始化顺序表(栈空间、堆空间都可以)


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


  1. 数据操作


  • 遍历(打印所有的数据)


  • 增(将数据增加到顺序表中)







顺序表


#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--;
}
相关文章
|
9月前
|
C语言 索引
嵌入式中一文搞定C语言数据结构--跳表
嵌入式中一文搞定C语言数据结构--跳表
64 0
|
存储 大数据 C语言
嵌入式C语言九大数据结构操作方式详解
嵌入式C语言九大数据结构操作方式详解
109 1
|
9月前
|
存储 算法 搜索推荐
嵌入式软件中常见的 8 种数据结构详解
嵌入式软件中常见的 8 种数据结构详解
237 0
|
存储 安全 程序员
嵌入式C之堆和栈
嵌入式C之堆和栈
|
存储 移动开发 算法
【从零开始的嵌入式生活】数据结构6——查找和排序
【从零开始的嵌入式生活】数据结构6——查找和排序
【从零开始的嵌入式生活】数据结构6——查找和排序
|
存储 算法
【从零开始的嵌入式生活】数据结构5——树
【从零开始的嵌入式生活】数据结构5——树
【从零开始的嵌入式生活】数据结构5——树
【从零开始的嵌入式生活】数据结构4——栈与队列(2)
【从零开始的嵌入式生活】数据结构4——栈与队列(2)
【从零开始的嵌入式生活】数据结构4——栈与队列(2)
【从零开始的嵌入式生活】数据结构4——栈与队列(1)
【从零开始的嵌入式生活】数据结构4——栈与队列(1)
【从零开始的嵌入式生活】数据结构4——栈与队列(1)
【从零开始的嵌入式生活】数据结构3——线性表及链表(2)
【从零开始的嵌入式生活】数据结构3——线性表及链表(2)
|
3月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
58 1