欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

线性表易错点与线性表程序设计易错点

发布时间:2024/10/14 编程问答 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 线性表易错点与线性表程序设计易错点 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站。博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事,做自己以后不会留有遗憾的事,做自己觉得有意义的事,不浪费这大好的青春年华。博主写博客目的是记录所学到的知识并方便自己复习,在记录知识的同时获得部分浏览量,得到更多人的认可,满足小小的成就感,同时在写博客的途中结交更多志同道合的朋友,让自己在技术的路上并不孤单。

目录:
1.线性表易错知识点
        单链表的存储密度
        关于头指针和头结点和首元结点
        关于为何使用头结点及相关题目
2.线性表程序设计易错题
        线性表的原地逆转
        删除顺序表中值为item的元素
        确定链表倒数第k个结点

1.1单链表的存储密度

单链表的存储密度小于1

存储密度:数据元素本身所占的存储量和整个结点结构所占的存储量之比。

由于链表的结点不及要设置数据元素外,还要额外设置指针域,设单链表数据元素本身所占存储量为D,指针域所占得到存储量为N,则存储密度为D/(D+N),所以一定小于1

1.2关于头指针和头结点和首元结点

1.头结点:头结点指针域存放首元结点,数据域一般可以不存储任何信息
2.头指针:头指针指向链表中第一个结点的指针,若链表有头结点,则头指针指向头结点,若链表无头结点那么头指针指向线性表首元结点
3.首元结点:第一个存放数据元素的结点

1.3关于为何使用头结点及相关题目

为了使对首元结点的操作与其他结点的操作一致

看一道例题:

在单循环链表中,将头指针改设为尾指针(rear)后,其首元结点和尾结点存储位置分别是()
答案:

首元结点:rear->next->next
尾结点:rear

需要特别注意的是:在单循环链表中有一个头结点

2.线性表程序设计考研大题

2.1线性表的原地逆转

设计一个算法,使得链表中的结点按照链接方向原地旋转,并要求算法的空间复杂度为O(1)

void Inverse(LinkList &L) {p=L->next;L->next=NULL;while(p!NULL){q=p->next;p->next=L->next;L->next=p;p=q;} }

2.2删除顺序表中值为item的元素

题目描述:已知长度为n的线性表A采用顺序存储结构,写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法可删除线性表中所有值为item的数据元素

void DeleteItem(SqList &A,ElemType item) {k=0;for(int i=0;i<A.length;i++){if(A.Elem[i]!=item){A.Elem[k]=A.Elem[i]; K++;}A.Length=k;} }

2.3 确定链表倒数第k个结点

我们如何高效的确定倒数第k个结点的位置

p=L>next;//p等于首元结点 q=L->next; int i=0; while(p!=NULL) {if(i<k)i++;elseq=q->next;p=p->next; }

最终q指向的是倒数第k个结点

总结

以上是生活随笔为你收集整理的线性表易错点与线性表程序设计易错点的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。