C语言的链表(c语言的链表实现栈的功能)

http://www.itjxue.com  2023-01-24 17:33  来源:未知  点击次数: 

C语言链表

删除节点函数:

SLIST?*deletelist(SLIST?*p,int?*pvalue)

{

????SLIST?*todel,?*head?=?p;

????while(p??p-next)?{

????????if?(p-next-data?==?*pvalue)?{

????????????todel?=?p-next;

????????????p-next?=?todel-next;

????????????free(todel);

????????}?else?{

????????????p?=?p-next;

??????????}

????}

????return?head;

}

输出函数:

void?outlist(SLIST??*h)

{??

????/*这里输出链表中各个数据*/

????h?=?h-next;

????while?(h)?{

????????printf("%d",?h-data);

????????h?=?h-next;

????????if?(h)?{

????????????printf("?");

????????}

????}

????printf("\n");

}

先提交回答,然后我检查一下

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

修改了一些bug,现在是正常的了,之前没有注意head节点是个特殊节点

另外,你的main函数里,缺少了 int a[N] 的定义,不知道是不是你漏打了,没有这个定义编译不过去的

C语言 链表

记录上一个节点的位置 链表就是上一个节点的next保存着下一个结构的地址 所以第22行就是保存上一个节点的位置

第26行就是每添加一个结构并把那个节点的next设置为NULL 如果还有添加的 把新节点给next 再把next设置为NULL

C语言里面的链表是什么

C语言里面的链表是一种数据结构

是一种线形的存储结构

链表和数组一样,也是将一组同类型的数据组织在一起的一种数据结构

不同的是

数组采用的是顺序存储,依靠数组的首地址和元素的相对地址(下标)来实现访问。

优点是访问方便快捷,而缺点是数组是静态的,不利于实现元素的动态增减。

而链表采用的是离散存储,依靠节点间的指向下一个节点的指针来实现访问。

其优缺点和数组相反

c语言 链表

#include

#include

//这里创建一个结构体用来表示链表的结点类型

struct

node

{

int

data;

struct

node

*next;

};

int

main()

{

struct

node

*head,*p,*q,*t;

int

i,n,a,b;

printf("输入小朋友人数和待插入的小朋友身高:如6,97\n");

scanf("%d,%d",n,b);

printf("输入已经排好队的小朋友的身高序列:\n");

head

=

NULL;//

头指针初始为空

for(i=1;i=n;i++)//

循环读入n个数

{

scanf("%d",a);

//

动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点

p=(struct

node

*)malloc(sizeof(struct

node));

p-data=a;//

将数据存储到当前结点的data域中

p-next=NULL;//

设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空

if(head==NULL)

head=p;//

如果这是第一个创建的结点,则将头指针指向这个结点

else

q-next=p;//

如果不是第一个创建的结点,则将上一个结点的后继指针指向当前结点

q=p;//

指针q也指向当前结点

}

t=head;//

从链表头部开始遍历

while(t!=NULL)//

当没有到达链表尾部的时候循环

{

if(t-next-data

b)//

如果当前结点下一个结点的值大于待插入数,将数插入到中间

{

p=(struct

node

*)malloc(sizeof(struct

node));//

动态申请一个空间,用来存放新增结点

p-data=b;

p-next=t-next;//新增结点的后继指针指向当前结点的后继指针所指向的结点

t-next=p;//

当前结点的后继指针指向新增结点

break;//

插入完毕退出循环

}

t=t-next;//

继续下一个结点

}

//

输出链表中的所有数

t=head;

printf("插入后序列为:\n");

while(t!=NULL)

{

printf("%d

",t-data);

t=t-next;//

继续下一个结点

}

system("pause");

return

0;

}

请采纳

(责任编辑:IT教学网)

更多

推荐时间特效文章