您当前的位置:首页 > 互联网教程

用c语言建立一个有序链表

发布时间:2025-05-13 10:16:09    发布人:远客网络

用c语言建立一个有序链表

一、用c语言建立一个有序链表

1、先按正常流程建立一个链表,再按照其某一个成员值进行冒泡排序(排序过程的交换,只交换链表指针以外的成员值)。

2、演示代码如下:(演示代码链表20个节点,成员值为随机值)

3、SLIST*init();//生成20个节点成员为随机数的链表

4、void showList(SLIST*slHead);//打印链表

5、void px(SLIST*slHead,int flag);//float=1:降序。=2升序

6、void px(SLIST*slHead,int flag)//flag=1:降序。=2升序

7、 SLIST*sl0=slHead->next,*sl1=NULL,slSave,*pSave=NULL;

8、 if((flag==1&& sl0->a<sl1->a)||(flag==2&& sl0->a>sl1->a))

9、 printf("节点%d成员值:%d\n",++i,slHead->next->a);

10、 SLIST*slHead=&head,*slTail=NULL,*slNew=NULL;

11、 slNew=(SLIST*)malloc(sizeof(SLIST));

二、麻烦讲解一下C语言中的链表

1、链表的最基本组成和功能,以单链表为例

2、首先单链表最基本要有一个数据区和一个指向区如下

3、每个这样的结构称之为一个节点。每个节点又指向区连接。

4、这样通过链表的第一个几点地址就可以找到整个链表的节点从而获取节点中的数据了。

5、上面说的是最基本的链表,也称之为裸链表

6、双向链表和单链表类似,就是多了一个指向区,指向当前节点的上一个节点,好处是,因为单链表只能顺序向下读取,而不能你想读取,双项链就可以任意方向读取数据了。

7、一般链表在应用时,会额外建立一个链表头。在链表头里会有一些方便对链表操作的东西。

8、比如你说的free指针,链表的第一节点地址,链表的尾地址,甚至一些控制变量如链表容量等

9、至于链表的具体应用很复杂,但其根本不会改变,并且链表的数据区可以是任何类型的数据,甚至可以是子链表。

三、求c语言链表的详细讲解

链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.我们知道,用数组存放数据时,

必须事先定义固定的长度(即元素个数).比如,有的班级有100人,而有的班只有30人,如果要用同一个数组先后存放不同班级的学生数据,则必须定义长度为100的数组.如果事先难以确定一个班的最多人数,则必须把数组定得足够大,以能存放任何班级的学生数据.显然这将会浪费内存.链表则没有这种缺点,它根据需要开辟内存单元.图10.11表示最简单的一种链表(单向链表)的结构.链表有一个"头指针"变量,图中以head表示,它存放一个地址.

该地址指向一个元素.链表中每一个元素称为"结点",每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址.课以看出,head指向第一个元素;第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为'表尾",它的地址部分放一个"NULL"(表示"空地址").链表到此结束.

可以看到:链表中各元素在内存中可以不是连续存放的.要找某一元素,必须先找到上一个元素,根据它提供的下一元素地址才能找到下一个元素.

如果不提供"头指针"(head),则整个链表都无法访问.链表如同一条铁链一样,一环扣一环,中间是不能断开的.打个通俗的比方:幼儿园的老师带领孩子出来散步,老师牵着第一个小孩的手,第一个小孩的另一只手牵着第二个孩子,……,这就是一个"链",最后一个孩子有一只手空着,他是"链尾".要找这个队伍,必须先找到老师,然后顺序找到每一个孩子.