c语言中链表的使用链表填空题 求大佬

无论是顺序存储结构还是链式存储结构,在内存中进行存放元素的时候,不仅需要存放该元素的相关信息,还需要存放该元素和其他元素之间的关系,而我们之前所学的顺序表“与生俱来”的物理结构自然地能够表达出元素和元素之间的关系,不需要额外的信息去表达元素和元素之间的关系,而对于链式存储这种非顺序存储的结构,需要额外附加指针去表示这种关系。

每个结点除了存放数据元素外,还要存储指向下一个节点的指针。

优点:不要求大片连续空间,改变容量方便

缺点:不可随机存取,要耗费一定空间存放指针

除了上述这种方法外,我们还可以先先声明LinkNode为结构体类型,在使用该类型的时候,将对应的变量定义为指针即可。

单链表分为带头结点和不带头结点,我们一般主要学习带头结点的。

在所有的操作之前,我们首先需要建立一个空的单链表,那么首先需要做的就是分配头结点。

“头插法”顾名思义就是将元素插入到头结点之后,插入一次好像和我们通常所讲的插入没什么区别,但多次这样插到头结点之后,也就是“第一个真正的节点”,那么是不是会产生一种现象,它最终的存储数据和我们所插入时的顺序是相反的。

printf("请输入你要插入的元素个数:");

“尾插法”顾名思义就是将元素插入到表尾,也就是我们普通的插入,那么怎么要找到表尾的位置呢?在顺序表中,我们完全可以利用它顺序存储结构的天然特性,通过下标即可以找到,但是单链表是没有办法的,我们只有两种方式,要么循环遍历,要么尝试在表尾的地方做个标记。

那么那种方法是好的呢?

答案是第二种!循环遍历的方式,如果只插入一个元素看似没什么问题,但如果多次的重复遍历循环无疑增加了时间复杂度,这显然不是好的方法。

第二个方法就不存在时间复杂度的问题,只需要在表尾位置做个标记,使它永远指向表尾即可。

printf("请输入你要插入的元素个数:"); r = s;//s为当前的表尾指针,将他的值赋值给r----使r永远指向表尾

既然要删除某个元素,那么首先我们需要保证这个元素是非NULL,其次,我们还需要保证它前面的那个节点也是非NULL,为什么呢?因为如果将该元素从链表中删除后,只有前面节点非NULL的情况下,才可以实现后续元素和前面子表的连接。

printf("不存在我们要删除的元素!"); printf("不存在我们要删除的元素!"); free(q);//需要及时的将删除了的元素空间进行释放

其他的基本操作都是很常规化的,这里就不单独的进行解释了,需要注意的点,我会在文章结尾部分的完整代码的注释中展出。

printf("请输入你要插入的元素和位序:(元素和位序之间用逗号隔开)\n");

如下所示的代码顺序不能发生改变,否则会出现无法和后面的节点;

在Creat函数中创建了一个单链表,那么我要怎么返回主函数,因为我是void一个Creat的函数,急求,谢谢各位大神了。


推荐于 · TA获得超过316个赞


· 贡献了超过217个回答

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 c语言中链表的使用 的文章