数据结构-线性相关代码
生活随笔
收集整理的這篇文章主要介紹了
数据结构-线性相关代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.漢諾塔-遞歸問題
int i=1;//記錄步數 void move(int n,char from,char to) {printf("第%d步:將%d號盤子%c---->%c\n",i++,n,from,to); } void hanoi(int n,char from,char denpend_on,char to) { if (n==1) move(1,from,to);//只有一個盤子是直接將初塔上的盤子移動到目的地 else { hanoi(n-1,from,to,denpend_on); move(n,from,to); hanoi(n-1,denpend_on,from,to); }
bool judge(LinkList head){LNode *q=head;LNode *p=head->next;int num=2;while(p){if(p->data!=num*num*q->data)return false;q=p;p=p->next;}return true; }
3.假定數組A[0,…,n-1]中有多個零元素,試寫一個函數,將A中所有的非零元素依次移到數組A的前端,要求空間復雜度為O(1)。 void MoveNumZeroLeft(int A[],int n){int i=0,j=n-1;while(i<j){while(A[i]!=0&&i<j) i++;while(A[j]==0&&i<j) j--;if(i<j) Swap(A[i],A[j]);} }
4.已知一個帶頭節點的單鏈表,設該鏈表只給出了頭指針head。在不改變鏈表結構的前提下,設計一個盡可能高效的算法,查找鏈表中倒數第K個位置上的節點。若查找成功,則返回該節點中元素值,否則返回-1。(只能通過一次遍歷)。 LNode * FindKthToTail(LinkList L,int k){LNode *p=L->head;LNode *q=NULL;for(int i=0;i<k-1;i++)p=p->next;q=L->head;while(q->next){p=p->next;q=q->next;}return q; }
5.將n(n>1)個整數存放到一維數組R中,試設計一個在時間和空間上盡可能高效的算法,將R中保存的序列循環左移p(0<p<n)個位置,即將R中的數據由(X0,X1,…,Xn-1)變換成為(Xp,Xp+1,…,X0,X1,…,Xp-1)。 void Converse(int R[],int n,int p){ //R為數組,n為長度,p為要左循環多少個Reverse(R,0,p-1);Reverse(R,p,n-1);Reverse(R,0,n-1); } void Reverse(int R[],int from,int to){for(int i=0;i<(to-from+1)/2;i++)Swap(R[from+i],R[to-i]); }
總結
以上是生活随笔為你收集整理的数据结构-线性相关代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编预备知识(五)
- 下一篇: HTML静态网页作业-篮球网页