线性表易错点与线性表程序设计易错点
写在前面:博主是一位普普通通的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个结点
总结
以上是生活随笔为你收集整理的线性表易错点与线性表程序设计易错点的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 一文搞定时间复杂度和空间复杂度
- 下一篇: 高级线性表——静态链表(最全静态链表解读