main2-3-2.c 两个仅设表尾指针的循环链表的合并(教科书图2.13)

 /* algo2-10.c 两个仅设表尾指针的循环链表的合并(教科书图2.13) */
 #include"c1.h"
 typedef int ElemType;
 #include"c2-2.h"
 #include"bo2-4.c"
 #include"func2-3.c" /* 包括equal()、comp()、print()、print2()和print1()函数 */

 void MergeList(LinkList *La,LinkList Lb)
 { /* 将Lb合并到La的表尾,由La指示新表 */
   LinkList p=Lb->next;
   Lb->next=(*La)->next;
   (*La)->next=p->next;
   free(p);
   *La=Lb;
 }                                            ?????????????

 int main()
 {
   int n=5,i;
   LinkList La,Lb;
   InitList(&La);
   for(i=1;i<=n;i++)
     ListInsert(&La,i,i);
   printf("La="); /* 输出链表La的内容 */
   ListTraverse(La,print);
   InitList(&Lb);
   for(i=1;i<=n;i++)
     ListInsert(&Lb,1,i*2);
   printf("Lb="); /* 输出链表Lb的内容 */
   ListTraverse(Lb,print);
   MergeList(&La,Lb);
   printf("La+Lb="); /* 输出合并后的链表的内容 */
   ListTraverse(La,print);
 }

 

运行:

[root@localhost algorithm]# gcc algo2-10.c -o algo2-10
[root@localhost algorithm]# ls
algo2-10  algo2-10.c  bo2-4.c  c1.h  c2-2.h  func2-3.c
[root@localhost algorithm]# ./algo2-10
La=1 2 3 4 5
Lb=10 8 6 4 2
La+Lb=1 2 3 4 5 10 8 6 4 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
a. 只有表头指针,没有表尾指针的双向循环链表是一种数据结构,它在正向和反向方向都可以遍历链表。这种链表的特点是:每个节点有一个指针指向它的前一个节点和一个指针指向它的后一个节点,同时表头节点的前一个节点指向表尾节点,表尾节点的后一个节点指向表头节点。由于没有表尾指针,我们无法直接访问表尾节点,但我们可以通过遍历整个链表找到它。对于插入和删除节点的操作,需要调整指针的指向来保持链表的循环性质。 b. 只有表尾指针,没有表头指针的链表也是一种数据结构,它只能从后往前遍历链表。这种链表的特点是:每个节点有一个指针指向它的前一个节点,但没有指针指向它的后一个节点。表尾节点的指针指向空,表示链表的结束。由于没有表头指针,我们无法直接访问链表的开头,只能通过遍历整个链表找到它。对于插入节点的操作,需要将新节点插入到表尾节点的后面,并更新表尾指针。对于删除节点的操作,我们需要找到目标节点的前一个节点,并更新其指针。由于只有表尾指针,无法实现从前往后的遍历操作。 这种只有表尾指针或只有表头指针的链表可以用于特定的场景和需求,但在通常情况下,我们会选择同时拥有表头和表尾指针的双向链表,以便能够更方便地在链表的两个方向进行操作和遍历。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值