嵌入式开发第17天(数据结构、链表的操作)

数据结构


结构体


struct info
{
char name[32];
int heigh;
int qq;
int number;
}


struct info lisi;//定义了struct info类型的lisi
struct info *lisi;//定义了struct info类型指针变量的lisi  ,要对其进行malloc内存
typedef struct info *p_info;定义了struct info类型指针变量的p_info


p_info lisi; == struct info *lisi;


1、用typedef方式对结构进行定义,然后对结构体成员进行赋值,并打印出来


struct info
{
char name[32];
int heigh;
int qq;
int number;
}


数据之间的关系


1:逻辑关系 

集合 线性 树状 图状


2:存储结构

顺序 链式 索引 散列


针对线性表
顺序存储
数据存放的地址是紧挨着的
需要预定空间大小,会造成空间的浪费或者不够用
查找数据方便,插入数据,删除数据不方便
链式存储

数据存放的地址是分散的,不一定紧挨着,随系统分配


数据运算
增删查改

增加数据

 删除数据 

查找 

 修改


数据:存放信息
数据元素:记录(名字,性别,身高 QQ)


单向链表 单向循环链表 双向链表 双向循环链表 内核链表(双向链表)


1、节点

typedef struct node
{
int data;
//char name[20];
struct node *next;

}node_list,*single_list;  //node_list = struct node   single_list = struct node *


2、节点初始化

single_list init_list(void)   //==struct node *init_list(void)
{
single_list my_list = malloc(sizeof(node_list));//为节点开辟堆空间
if(my_list == NULL) //判断是否分配空间成功
return ;

my_list->next = NULL;  //置节点的next指针为空,防止为野指针
return my_list;          //返回成功的指针地址

}


3、插入节点

void insert_node(single_list p,single_list new)

{
if(p == NULL || new == NULL)   //判断传过来的p与new是否为NULL
return;
new->next = p->next;    //new里的指针指向p本来指向的下一个节点
p->next   = new;        //p里面的指针指向new节点

}


4、显示节点信息

void show(single_list list)
{
if(list == NULL)
return;

single_list p = list->next;

while(p!=NULL)
{
printf("data = %d\n",p->data);
p = p->next;
}

printf("\n");


}


5、查找节点


single_list find_node(single_list head_list,int data)
{
if(head->next == NULL)
return;

single_list p;
p = head->next;  //指向第一个节点


while(p!=NULL)
{
if(p->data == data)  //判断是否为删除的数据
break;

p=p->next;
}

return p;
}


6.删除节点

int remove_node(single_list head_list,single_list delete_list)
{
if(head_list->next == NULL)
return;

single_list p = head_list;
while(p!=NULL && (p->next != delete_list))
{
p=p->next;
}
if(p == NULL)
return 0;
p->next = delete_list->next;
delete_list = NULL;

}








练习:插入节点,并显示出来
 93 65 78 45


删除节点:
1、找到节点
2、删除节点
3、free节点


练习:
基础操作
1、实现节点移动操作(比如输入4 5,结果把4移到5后面)
1  2  58  69  45 21 
输入:1  45 
输出:2  58  69  45  1  21 


加强操作
2、在一个结构体中定义学生的成员变量(学号,姓名,身高)
   手动输入5个学生的信息,用链表关联起来,当输入i时,按学号从低到高排序并打印出来






















  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

交叉编译之王 hahaha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值