线性表易错点与线性表程序设计易错点
寫在前面:博主是一位普普通通的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個結點
總結
以上是生活随笔為你收集整理的线性表易错点与线性表程序设计易错点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文搞定时间复杂度和空间复杂度
- 下一篇: 高级线性表——静态链表(最全静态链表解读