链表常见操作-嵌入式C语言

嵌入式笔记

1.单链表组织与存储

typedef struct _link_node
{
   elem_type data;
   struct _link_node *next;
} link_node , *link_list;

2单链表常见操作

(1)初始化

int init_link(link_list *list) //注意,这里是指针的指针,相当于**link_node,实际含义是存放link_node指针的指针 
{
   *list= (link_list)malloc(sizeof(link_node));  //*list是一个link_node指针。即分配一个link_node大小的空间给*list指针。
   if(!list)

  {
      return -1;
   }
   memset(&((*list)->data),0,sizeof(elem_type));   //初始化data段的内存空间,第一个参数必须是指针,因此用&取址
}



(2)查询第i个数据,并放回data区域

int init_link(link_list *list)  //注意,这里是指针的指针,相当于**link_node,实际含义是存放指针的链表的指针 


{
   *list= (link_list)malloc(sizeof(link_node));  //*list是一个link_node指针。即分配一个link_node大小的空间给*list指针。
   if(!list)
   {
      return -1;
   }
   memset(&((*list)->data),0,sizeof(elem_type));   //初始化data段的内存空间,第一个参数必须是指针,因此用&取址
}

(3)合并两个链表(根据id大小)。输入链表头list_a,list_b,返回链表头list_c。

int merge(link_node list_a,link_node list_b, link_node list_c)
{
  link_list pa,pb,pc;
  //虽然有表头list_a,list_b,list_c,但运算过程中还是需要元素指针
  pa = list_a->next;
  pb = list_b->next;  //链表头本身没数据,next才是下一个元素。
  list_c = pc = list_a;
  while(pa && pb)  //pa和pb存在,才循环运算
  {
      if(pa->data < pb->data)
      {
          pc->next = pa;  //把pa添加到list_c中。注意。pc最开始和list_c是同一个头,所以pc所指的next链表,也是所指向list_c的。
          pc = pa;             //移动pc上的指针到新的指针:pa位置上
          pa = pa->next;  //移动指向list_a的指针
      } 
      else
      {  
         pc->next = pb;
         pc = pb;
         pb = pb->next;
      }
  }
  //pa或pb某一指针指向链尾,为NULL,则把还没到尾的那个练表直接连接到list_c结尾
      pc->next = pa?pa:pb;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值