一.裝置及軟體
vc6.0
二.語言
c++三.涉及的資料結構與演算法
單鏈表、尾插法
四.問題描述
荷蘭旗問題亦稱三色旗問題。
這裡荷蘭旗用0,1,2分別表示三種顏色:紅,白,藍。用陣列存放一串數字。開始是打亂順序的排列,要求用單鏈表分別存放這三種數,然後按旗子的顏色,紅,白,藍順序輸出。
五.主要注意點
荷蘭旗問題的c++**分為這幾部分:
結構化單鏈表;
建立單鏈表;
初始化單鏈表;
實現主要程式;(關鍵)
輸出單鏈表。
其中:
typedef int stud;
typedef struct l
list;//(注意與順序表的區分)
兩個指標*r,*s,*r指向尾部,這裡用尾插法。*s用於儲存陣列。迴圈插入陣列後,注意釋放尾部結點的空間。(具體**在**部分可見)
void initlist(list *&l)
void displist(list *l)
}
荷蘭旗關鍵程式,在於建立三張鍊錶l1,l2,l3分別用三個指標*r1,*r2,*r3指向他們的尾部。
其中l1用l的頭結點,l2,l3分別開闢新的頭結點。
當p!=null,遍歷陣列,為0的尾插入到l1表中,為1的尾插入到l2表中,為2的尾插入到l3表中。q=p->next,臨時儲存p的下乙個結點,p=q在往復迴圈判斷。
最後注意釋放三個指標*r1,*r2,*r3指向的尾部結點的空間。
該方法中可以包含輸出方法。
#includeusing namespace std;
typedef int stud;
typedef struct l
list;
void createlist(list *&l,stud a,int n)
r->next=null;
} void initlist(list *&l)
void displist(list *l)
} void parti(list *l)
if(p->data==1)
if(p->data==2)
q=p->next;
p=q;
}
r1->next=null;
r2->next=null;
r3->next=null;
displist(l1);
displist(l2);
displist(l3);
} int main()
; createlist(m,a,6);
printf("---排序前的旗子---\n");
displist(m);
printf("\n");
printf("---排完序的旗子---\n");
荷蘭旗問題(C語言實現)
三色旗問題,也叫荷蘭旗問題 一根繩子上有一些藍色 白色 紅色的旗子,它們的排列順序是隨意的 現要求把旗子分類並按照藍色的旗子都在前,紅色的旗子都在後,白色的旗子在中間的順序排列 你只能在一根繩子上操縱這一切,並且一次只能調換兩個旗子 include define max flag 30 define...
單鏈表實現 C語言
單鏈表分為帶頭結點和不帶頭結點。頭結點是和普通結點一樣,有資料域,指標域。資料域存放鍊錶結點的個數,指標域存放指向鍊錶的指標。不帶頭結點是指煉表有乙個單純的指標,指向鍊錶,不儲存資料。pragma once ifndef linklist h 防止標頭檔案重複引用 define linklist h...
C語言單鏈表實現
今天分享一下單鏈表 有空頭 的一些操作!主要呢就是增 刪 列印!單鏈表可以比喻成一趟火車,有空頭的單鏈表就像是乙個火車頭拉著一節有一節的車廂。乙個車廂中有資料域和指標域,指標域用來連線,每節車廂肯定要有東西連著,不然就沒有方向了。如圖 所以連線的時候只要將指標域指向下乙個節點就是連線上了,然後刪除呢...