C语言程序设计(数据结构)——尾插法

尾插法
一开始头指针和尾指针都指向头结点,然后往里边插入元素,
每插入一个元素尾指针就后移一下,现在我们的尾指针就指向我们链表中最后一个结点了
现在我们开始插入一个新的节点,怎么做呢?
我们需要从内存找到一块相应的空间,然后将这个空间的地址存储在,指针变量p当中,这个情况,就称作p指向我们的元素的新节点
然后我们将新节点的数据域插入我们想要插入的元素,然后将他的指针域设置为空

然后使用尾插法将这个节点插入到我们的链表当中去

实际上就是给元素的最后一个节点的指针域赋值,赋值谁呢,,,
赋值的值就是我们的p指针所指向的新节点的地址,把p指针变量所指向的节点的地址赋值给前一个我们想插入的节点的指针域(尾指针所指向的next域),
就是我们新节点所赋值的域

简而言之,言而简之,就是分三步
开辟新空间,
数据域赋值我们想要插入的数据,指针域为空,指针变量p指向新节点的地址,
然后用链表的尾指针指向新的节点的地址,
最后将新建的空间地址的指针变量的值赋值给前尾指针的地址,尾指针指向的地址就变成了新插入节点的地址

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct LNode *next;    //指向后继结点
} LinkNode; 


void CreateListR(LinkNode *&L, ElemType a[], int n)
{	int i;
	LinkNode * s,*r;
	L = (LinkNode *)malloc(sizeof(LinkNode));
	r=L;
	for(i=0;i<n;i++)
	{
		s = (LinkNode *)malloc(sizeof(LinkNode));
		s->data = a[i];
		r->next = s;
		r=s;
	}
	r->next=NULL;
}


void DispList(LinkNode *L){
	LinkNode *p = L->next;    //p指向首节点
	while(p != NULL){    //p不为NULL,输出p节点的data
		printf("%d ", p->data);
		p = p->next;    //p移向下一个节点
	}
	printf("\n");
}

int main()
{	
	LinkNode *h;
	ElemType a[10]={0,1,2,3,4,5,6,7,8,9};
	CreateListR(h,a,10);
	DispList(h);
	return 0;
}

上述算法里,动态申请新结点空间时未加错误处理,这对申请空间极少的程序而言不会出问题。但在实用程序里,尤其是对空间需求较大的程序,凡是涉及动态申请空间,一定要加入错误处理以防系统无空间可供分配。

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
家族关系查找系统是一个基于C语言程序设计数据结构课程设计项目。该系统旨在帮助用户查找和管理家族成员之间的关系。 该系统的设计采用了合适的数据结构,以便高效地存储和检索家族成员的信息。其中最重要的数据结构之一是树(tree),每个节点表示一个家庭成员,通过父节点和子节点的链接表示家族成员之间的关系。通过使用树这种数据结构,系统可以方便地追踪家族成员之间的亲属关系。 系统的设计和实现包括以下几个关键功能: 1. 家族成员信息录入:用户可以输入每个家族成员的姓名、性别、出生日期等信息,并指定其在树中的位置(即父节点和子节点)。 2. 家族关系查询:用户可以通过输入指定家庭成员的姓名,系统会根据已存储的家族信息,找到该成员,并显示其相关的亲属关系,包括父母、配偶和子女等。 3. 家族成员关系修改:用户可以在系统中对已录入的家族成员关系进行修改。例如,可以修改某个成员的父母关系,或者添加、修改或删除某个成员的子女关系。 4. 家族族谱展示:系统还可以以树的形式展示整个家族族谱,以便用户更直观地了解家族成员之间的关系。 该系统的实现主要依赖于C语言的编程技巧和数据结构应用。通过合理设计和实现,可以实现高效、准确的家族关系查找功能,方便用户进行家族历史的研究和记录。同时,该项目也有助于提升学生在C语言数据结构方面的编程能力,加深对数据结构的理解和应用

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yearn*adn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值