当前位置:首页 » 编程语言 » c语言指针链表

c语言指针链表

发布时间: 2025-08-16 00:08:08

① 问下c语言链表的问题 前面结构体里定义的指针和函数里定义的结构体指针有什么不同,看了n久了,还是看

以下代码是一个链表的逆置操作代码,供参考
#include<stdio.h>
#include<stdlib.h>

structnode{
intn;//结点中的数据
structnode*next;//指向后继结点的指针
}*list=NULL;//表头,初值NULL,表示空表
voidcreateList()//建立链表
{
structnode*p;//临时结点指针
inti;

for(i=5;i>0;i--)
{
p=(structnode*)malloc(sizeof(structnode));//申请一个结点
p->n=i;//数据赋值
//以下两句,实现头插法建立链表
p->next=list;//把新结点p装在表头前
list=p;//p成为新的表头
}
}
voidshowList()
{
structnode*p=list;
while(p)
{
printf("%d",p->n);
p=p->next;
}
printf(" ");
}

voidreverseList()
{
structnode*p=NULL,*h=list,*t;

while(h)
{
t=h;//分离出一个结点
h=h->next;//h指向后续的部分,保持原表不丢失

t->next=p;//头插法
p=t;
}
list=p;//表头指针赋值
}

intmain()
{
printf("link: ");
createList();//建表
showList();//显示表
reverseList();//逆置
showList();//再显示
return0;
}

② C语言中:链表中的指针与指针域的区别

这是两个不同的概念。
1
指针是C语言中的一个数据类型。在链表的节点中,可能包含多个指针。
2
指针域是指的链表中用来指向相关节点的指针,一般是下一个,对于双向链表,也包括指向上一个的指针。
3
对于链表节点,可以分为数据域和指针域两部分。数据域中可能包含有指针类型。指针域中必然是指针类型。

③ C语言 链表 指针问题

1、删除指针,并不会释放他指向的内存地址。

2、如果你指向的地址还需要用,为什么要删除其指针。同一个地址可以有多个指针。

你可以在结构里定义2个链表指针,分别是正向和反向,这样你输入的的时候,就直接得到正反两个链表了。我写了案例,你参考吧。

#include<stdio.h>
#include<malloc.h>
#definesize5//你想输入的链表个数
typedefstructstt
{
charnum;
structstt*next0;//正向链表指针
structstt*next1;//反向链表指针
}STT;
STT**creatSTT();//创建一条链表,返回其正向链表首节点及尾节点组成的指针数组
voidprintSTT(STT*sttHead,intflag);//打印链表,flag=0打印正向链表,flag=1打印反向链表

intmain()
{
intn=size,i;
STT*sttHead=(STT*)malloc(sizeof(STT)),*stt0[n],*stt1[n],**stts=NULL;
for(i=0;i<n;i++)
{
stts=creatSTT();
stt0[i]=stts[0];//这就是你想要得到的正向链表首指针数组
stt1[i]=stts[1];//这就是你想要得到的反向链表首指针数组
}

printf("输入的所有链表为 ");
for(i=0;i<size;i++)
{
sttHead->next0=stt0[i];
printSTT(sttHead,0);
}
printf("所有反转链表为 ");
for(i=0;i<size;i++)
{
sttHead->next1=stt1[i];
printSTT(sttHead,1);
}
return0;
}

STT**creatSTT()
{
charnum;
STT*stt0=NULL,*sttTail=NULL,*sttNew=NULL,**stts;
stts=(STT**)malloc(sizeof(STT*)*2);//存放首尾节点的指针数组
printf("请连续输入一串数字组成链表:(非数字字符将被过滤) ->");
while(1)
{
num=getchar();
if(num>='0'&&num<='9')
{
sttNew=(STT*)malloc(sizeof(STT));
sttNew->num=num;
sttNew->next0=NULL;
sttNew->next1=NULL;
if(stt0==NULL)
stt0=sttNew;
else
{
sttTail->next0=sttNew;//连接正向链表指针
sttNew->next1=sttTail;//连接反向链表指针
}
sttTail=sttNew;
}
if(num==' ')
break;
}
stts[0]=stt0;
stts[1]=sttTail;
returnstts;
}
voidprintSTT(STT*sttHead,intflag)
{
if(flag==0)
{
while(sttHead->next0)
{
printf("%c",sttHead->next0->num);
sttHead=sttHead->next0;
}
printf(" ");
}
else
{
while(sttHead->next1)
{
printf("%c",sttHead->next1->num);
sttHead=sttHead->next1;
}
printf(" ");
}
}

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:585
制作脚本网站 发布:2025-10-20 08:17:34 浏览:881
python中的init方法 发布:2025-10-20 08:17:33 浏览:574
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:761
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:677
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1005
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:249
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:108
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:799
python股票数据获取 发布:2025-10-20 07:39:44 浏览:705