如何用尾插法建立双向链表(C语言)

 ↓注意:下面有小马宝莉图片↓

↓以下是正文↓ 

------------------------------------------------------------------------------------------------------------------------------------------

双向链表的尾插法同单链表的尾插法一样,通过将新结点逐个插入链表的尾部来创建链表,将链表尾部的结点的指针域指向后缀,不同的是新结点不仅需要将链表尾部结点的后缀指针域指向新结点,还需要将新结点的前缀指向链表尾部结点

单链表的头插法访问网址:

https://blog.csdn.net/weixin_45592399/article/details/103291250?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162746598816780271521919%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162746598816780271521919&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-103291250.first_rank_v2_pc_rank_v29&utm_term=%E5%8D%95%E9%93%BE%E8%A1%A8%E5%B0%BE%E6%8F%92%E6%B3%95&spm=1018.2226.3001.4187

程序运行结果如下:

1       1
2       2
3       1
4       31
5       4
6       23
7       3
8       55
9       543
0       354
122     366
122     366
0       354
9       543
8       55
7       3
6       23
5       4
4       31
3       1
2       2
1       1
请按任意键继续. . .

代码如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
	int a0;
	int b0;
}Elemtype;
struct Test
{
	Elemtype data;
	struct Test *prior;//*前缀
	struct Test *next;//*后缀
};
struct Test *Math_Dash()
{
	int a[]={1,2,3,4,5,6,7,8,9,0,122},b[]={1,2,1,31,4,23,3,55,543,354,366};//*要插入的信息
	struct Test *c,*d;//*创建新结点
	c=(struct Test*)malloc(sizeof(struct Test));//*为新结点分配内存
	c->next=NULL;c->prior=NULL;//*将头结点的前缀指针域和后缀指针域置空
	d=c;
	int e;
	for(e=1;e<=11;e++)//*双向链表尾插法
	{
		struct Test *f;//*创建新结点
		f=(struct Test*)malloc(sizeof(struct Test));//*为新结点分配内存
		f->data.a0=a[e-1];f->data.b0=b[e-1];//*赋值
		f->next=NULL;//*将f的后缀指针域置空
		f->prior=d;//*f的前缀指向d
		d->next=f;//*将d的后缀指向f
		d=d->next;//*指向下一个结点
	}
	c=c->next;c->prior=NULL;//*通过元素前移,再将c的前缀置空,从而删除头结点
	                        //*这样,就可以避免输出莫名其妙的数字了 
	return c;
}
int main(int argc, char *argv[])
{
	struct Test *o;
	o=Math_Dash();
	while(o)
	{
		printf("%d\t%d\n",o->data.a0,o->data.b0);
		o=o->next;
	}
	o=Math_Dash();
	while(o->next)
	{
		o=o->next;
	}
	while(o)
	{
		printf("%d\t%d\n",o->data.a0,o->data.b0);
		o=o->prior;
	}
	system("pause");
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值