当前位置:首页 » 编程语言 » 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(" ");
}
}

热点内容
python爬虫的书籍 发布:2025-08-16 02:43:26 浏览:102
87键盘源码 发布:2025-08-16 02:15:13 浏览:845
app访问网页 发布:2025-08-16 02:14:37 浏览:856
编译之后的链接是干什么的 发布:2025-08-16 01:54:51 浏览:823
rust腐蚀服务器ip地址 发布:2025-08-16 01:53:26 浏览:265
编程代中文 发布:2025-08-16 01:47:42 浏览:707
公积金账户密码是哪里的 发布:2025-08-16 01:41:50 浏览:870
如何从iphone查看wifi密码 发布:2025-08-16 01:37:29 浏览:69
swf编译器 发布:2025-08-16 01:27:51 浏览:119
存储过程nvl 发布:2025-08-16 01:27:06 浏览:112