静态链表学习---的问题
发布网友
发布时间:2022-05-22 00:50
我来回答
共2个回答
热心网友
时间:2023-11-22 21:08
楼上说的对,链表肯定是要使用指针的,指针本身就是C的一个重要特点。
“静态”和“动态”只是在链表所对应的结构变量的使用上有区别的,“静态”通常情况下是事先分配好的,“动态”则是在使用的时候即时申请的。
“链表”体现在“链”上,所谓的“链”就是一个接一个,那么结构变量靠什么接起来,就是“指针”。
你下面的结构错了:
struct text
{
char txt[81];
int cur;
};
结构链表一定在结构中有一个与自己本身数据类型一样的变量,这个变量就是我们所说的“链”,并且这个变量一定是个指针型变量。
struct text
{
char txt[81];
struct text *cur;
};
struct text *p;
do
{
gets(s[i].txt);
s[i].cur=&s[i+1];
}while(*(s[i].txt));
s[i].cur=NULL;
以下2个程序语句就没有链表的操作了,实为一个数组操作。
for(i=0;s[i].cur;i++)
puts(s[i].txt);
如果用数组操作,由于i记录的是你的最后一个输入内容的索引,因此,循环变量应采用其他变量。
for(int j=0;j<i;j++)
puts(s[j].txt);
如果采用链表操作,可直接将开始的一段代码拷过来,稍加改动即可。
在程序开始处结构变量定义完后,定义变量 struct text *p;
p=s[0];
do
{
printf("%s\n",p->txt); // 这样写
p=p->next;
}
while(p!=NULL);
C语言结构是C的精华,也是数据结构的精华所在,好好研读,肯定能学会。
热心网友
时间:2023-11-22 21:09
静态链表并不是不使用指针的链表,链表都要使用指针。
这里的“静态”是指这个链表中的各个成员所占用的存储空间是静态分配的。
像你的示例代码中那样定义的s[3]是个全局变量,从进程的角度来说它的存储空间就是静态分配的。但是链表中各个成员还是靠指针串起来的。
当然动态和静态是相对的。对于操作系统来说所有进程的用户空间都是动态的,可以换入和换出,只是进程不知道而已,还以为它是静态的。