C 語言單鏈表實現荷蘭旗問題

2021-09-12 21:35:08 字數 1757 閱讀 7014

一.裝置及軟體

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語言單鏈表實現

今天分享一下單鏈表 有空頭 的一些操作!主要呢就是增 刪 列印!單鏈表可以比喻成一趟火車,有空頭的單鏈表就像是乙個火車頭拉著一節有一節的車廂。乙個車廂中有資料域和指標域,指標域用來連線,每節車廂肯定要有東西連著,不然就沒有方向了。如圖 所以連線的時候只要將指標域指向下乙個節點就是連線上了,然後刪除呢...