資料結構與演算法 c語言 03 鍊錶

2021-09-13 03:11:55 字數 3758 閱讀 2405

1.(單鏈表的建立與輸出)請用鍊錶的形式儲存使用者輸入的n個整數。要求使用堆記憶體,注意記憶體的分配和釋放。

【輸入】第一行整數n,第二行n個整數

【輸出】n個整數之和

例如:【輸入】

53 6 9 10 1

【輸出】

29

#include

#include

typedef

struct node

node;

//不能直接在後面寫node[1000],並不是申明變數

node a[

1000];

intmain()

sum=a[0]

.data;

//sum需要初始化

for(i=

0;i1;i++

)printf

("%d"

,sum)

;}

2.(單鏈表的下標訪問)請編寫程式輸出單鏈表中對應於下標i到下標j之間的資料。

【輸入】第一行整數n(1<=n)

第二行n個整數

第三行i的值 j的值(i和j為合法下標,j >= i)

【輸出】下標i到j之間的數值

例如:【輸入】

53 6 9 10 1

0 2【輸出】

3 6 9

#include

#include

typedef

struct node

node;

node a[

1000];

intmain()

int*head;

head=

&a[t]

.data;

scanf

("%d"

,&i)

;scanf

("%d"

,&j)

;for

(t=i;t<=j;t++

)}

3.(單鏈表的指定值插入)請編寫程式在單鏈表的值為x的元素之後均插入值為y的元素,並輸出所有的插入位置。

【輸入】第一行整數n(1<=n)

第二行為單鏈表中的n個整數

第三行 x(x在單鏈表中存在)y要插入的整數,x和y均為int型別,且不相等

【輸出】y插入在單鏈表中的下標位置

例如:【輸入】

53 6 9 10 1

6 7 //在所有的數字6後面插入數字7

【輸出】

2 //7插入後的位置

【輸入】

53 6 9 6 1

6 7 //在所有的數字6後面插入數字7

【輸出】

2 5 //7插入後的位置

#include

#include

typedef

struct node

node;

node a[

1000];

intmain()

int*head;

head=

&a[t]

.data;

scanf

("%d"

,&i)

;scanf

("%d"

,&j)

;for

(t=0

;treturn0;

}

4.(刪除單鏈表的指定值)請編寫程式刪除單鏈表中所有值為x的元素。並輸出刪除x後的鍊錶資訊。

【輸入】第一行整數n(1<=n)

第二行為單鏈表中的n個整數

第三行 x,x為int型別

【輸出】刪除x後的單鏈表資訊

例如:【輸入】

63 6 9 10 6 1

6【輸出】

3 9 10 1

#include

#include

typedef

struct nodenode;

node a[

1000];

intmain()

int*head;

head=

&a[t]

.data;

scanf

("%d"

,&i)

;for

(t=0

;t(a[t]

.data!=i)

printf

("%d "

,a[t]

.data);}

return0;

}

5.(約瑟夫問題)n 個人圍成乙個圓圈,首先第1個人從1開始乙個人乙個人順時針報數, 報到第m個人,令其出列。然後再從下乙個人開始,從1順時針報數,報到第m個人,再令其出列,…,如此下去, 直到圓圈中只剩乙個人為止。此人即為優勝者。請用環形鍊錶實現約瑟夫問題。

【輸入】n(2<=n<=60) m(1<=m)

【輸出】最後的勝利者編號(編號範圍是1至n)

例如:【輸入】

8 3【輸出】

7

6.(鍊錶置逆)設有乙個表頭指標為h的單鏈表。試設計乙個演算法,通過遍歷一趟鍊錶,將鍊錶中所有結點的鏈結方向逆轉。要求逆轉結果鍊錶的表頭指標h指向原鍊錶的最後乙個結點。

【輸入】第一行整數n(1<=n)

第二行為單鏈表中的n個整數

【輸出】置逆後的單鏈表資訊

例如:【輸入】

63 6 9 10 6 1

【輸出】

1 6 10 9 6 3

#include

#include

struct nodea[

1000];

intmain()

for(i=n-

1;i>

0;i--

) head=

&a[n-1]

;printf

("%d "

,(head->data));

for(i=n-

1;i>

0;i--

)return0;

}

7.(刪除鍊錶中的重複元素)請編寫程式刪除鍊錶中的多餘節點,即:若煉表中有多個節點具有相同的值,則只保留其中的乙個節點即可,使得處理後的鍊錶中的值各不相同。

【輸入】第一行整數n(1<=n)

第二行為單鏈表中的n個整數

【輸出】刪除鍊錶中的重複元素後的單鏈表資訊

例如:【輸入】

93 6 9 10 6 1 3 10 6

【輸出】

3 6 9 10 1

#include

#include

struct nodea[

1000];

intmain()

;struct node *pre,

*cur;

struct node *head;

scanf

("%d"

,&n)

;scanf

("%d"

,&a[0]

.data)

; head=

&a[0];

while

(ia[n-1]

.next=

null

; pre=

&a[0];

for(i=

0;i}}

// printf("%d",s);

n-=s; cur=

&a[0];

for(i=

0;i)return0;

}

C語言 資料結構與演算法 靜態鍊錶

靜態鍊錶 用陣列描述的鍊錶 備用鍊錶 未被使用的陣列元素 建立 define size 1000 為了方便插入資料通常會把陣列建立的大些 typedef struct stlist stlist space size 初始化 初始化靜態鍊錶 void inilist space size 1 cur...

資料結構與演算法 C語言鍊錶案例

define crt secure no warnings include stdio.h include stdlib.h include string.h 設計鍊錶節點 typedef struct linknode linknode 設計鍊錶管理結構體 由於多了m size 可以更方便管理節點...

資料結構與演算法之美 03鍊錶

陣列 缺點 大小固定 優點 簡單實用,訪問效率更高 可借助cpu快取機制 鍊錶 缺點 記憶體不連續,訪問效率不高。對記憶體使用苛刻,當鍊表發生頻繁插入 刪除操作時,會導致頻繁的記憶體申請和釋放。優點 鍊錶本身沒有大小的限制,天然地支援動態擴容 1 在刪除給定指標指向的結點時,我們已經找到了要刪除的結...