資料結構之C語言重點複習

Similar documents
Microsoft PowerPoint - C_Structure.ppt

新・明解C言語入門編『索引』

PowerPoint Presentation

新・解きながら学ぶC言語

新版 明解C言語入門編

C 1

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

untitled

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

陣列與鏈結串列 Array and Linked List

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

C/C++ - 文件IO

C/C++ - 函数

CC213

Microsoft PowerPoint - STU_C_Lang_CH13.ppt

游戏攻略大全(五十六).doc

牧 者 心 聲 要 因 心 懷 平 而 作 惡 要 謹 慎 言 行 免 得 舌 頭 犯 罪 ; 惡 人 時 候 要 用 嚼 環 勒 住 口 ( 詩 三 十 九 1) 今 天 社 會 和 教 會 裏 極 其 渴 望 人 能 以 具 體 行 動 勉 勵 走 善 良 正 直 路 作 好 榜 樣 ; 可 惜

净 利 润 和 扣 除 非 经 常 性 损 益 后 归 属 于 母 公 司 股 东 的 净 利 润 分 别 为 亿 元 和 亿 元 ; 3 假 设 本 公 司 2016 年 扣 除 非 经 常 性 损 益 前 归 属 于 母 公 司 股 东 的 净 利 润 分 别 为 6

C/C++语言 - 运算符、表达式和语句

105A 資管一程式設計實驗 06 函式定義謝明哲老師 2 程式設計實驗 6.3: 自行定義一個可以接受兩個整數並傳回其最大公因數的函式, 接著利用該函式自 行定義一個可以接受兩個整數並傳回其最小公倍數函式 // gcd_fcn.cpp int gcd(int m,

C/C++ - 结构体、共用体、枚举体

epub 33-8

新版 明解C++入門編

untitled

C语言的应用.PDF

C++ 程式設計

Microsoft PowerPoint - Class5.pptx

[改訂新版]C言語による標準アルゴリズム事典

氣泡排序 #include <stdio.h> int main() { int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 }; int len = (int) sizeof(arr) / sizeof(*arr);

ebook14-4

C/C++ 语言 - 循环

extend

運算子多載 Operator Overloading

untitled

CHAPTER VC#

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

Microsoft PowerPoint - 04-array_pointer.ppt

华恒家庭网关方案

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

C/C++ - 字符串与字符串函数

C/C++基礎程式設計班

CC213

C/C++ - 数组与指针

Microsoft Word - part doc

Linked Lists

PowerPoint Presentation

C/C++ - 字符输入输出和字符确认

プログラムの設計と実現II

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

_汪_文前新ok[3.1].doc

CC213

untitled

Microsoft PowerPoint - 13_指標、資料傳遞2.pptx

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

第5章修改稿

说 : 荀 子 极 偏 驳, 只 一 句 性 恶, 大 本 已 失 5 朱 熹 说 : 荀 扬 不 惟 说 性 不 是, 从 头 到 底 皆 不 识 6 采 取 的 都 是 这 种 理 论 框 架 另 一 种 理 论 框 架 始 于 20 世 纪 前 期, 这 便 是 诸 子 学 研 究 的 框 架

新・解きながら学ぶJava

untitled

!153 第五講 函式 講師 : 李根逸 (Ken-Yi Lee),

立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :

糖尿病防治指南(二).doc

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

游戏攻略大全(五十二).doc

游戏攻略大全(五十一).doc

Microsoft PowerPoint - plan06.ppt

!194 課程 大綱 陣列介紹 [P.195] 陣列的使 用 [1] - 多個同型變數 [P.196] 陣列的初始化 [P.198] 陣列的使 用 [2] - 循序存取 [P.199] 陣列的使 用 [3] - 隨機存取 [P.200] 陣列的複製 [P.203] 在函式間傳送陣列 [P.204]

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

¨Æ·~½g¡ã¾·~¤ÀÃþ

% 25% (i) 95% 96,290,900 (ii) 99.9% 17,196,000 (iii) 99.9% 89,663,100 2

Microsoft Word - om388-rnt _excl Items 16 & 38_ _final_for uploading_.doc

國立中山大學學位論文典藏.PDF

Microsoft Word mpc-min-chi.doc

( ) 1

穨cwht.PDF

900502_Oasis.indb

bnb.PDF

untitled

Microsoft Word _4

郑州大学(下).doc

厨房小知识(六)

广 东 纺 织 职 业 技 术 学 院 发 展 党 员 公 示 制 实 施 办 法 关 于 推 荐 优 秀 团 员 作 为 党 的 发 展 对 象 工 作 的 意 见 后 勤 管 理 工 作 广 东 纺 织 职 业 技 术 学 院 新 引 进 教 职 工 周 转 房 管 理


游戏攻略大全(五十).doc

金融英语证书考试大纲


健康知识(二)

中南财经大学(二).doc

广西大学(一).doc

根据学校教学工作安排,2011年9月19日正式开课,也是我校迁址蓬莱的第一学期开学

山东大学(一).doc

2

主 编 : 杨 林 副 主 编 : 张 新 民 邹 兰 曹 纯 纯 周 秋 婷 李 雅 清 黄 囡 囡 评 审 顾 问 : 杨 林 张 新 民 评 审 : 张 新 民 邹 兰 曹 纯 纯 周 秋 婷 李 雅 清 黄 囡 囡 李 忆 萍 徐 如 雪 文 字 编 辑 : 曹 纯 纯 邹 兰 李 雅 清

最新文物管理执法全书(十四).doc

园林常识(二).doc

前 言 二 一 六 年 四 月 四 日, 兒 童 節, 誕 生 了 一 件 美 事 : 中 國 作 家 曹 文 軒 在 意 大 利 博 洛 尼 亞 國 際 童 書 展 榮 獲 國 際 安 徒 生 文 學 獎, 是 該 獎 創 設 六 十 年 來, 第 一 位 摘 桂 的 中 國 作 家, 意 義 重

Transcription:

鏈結串列自編教材 ( 一 ) 本教材 ( 一 ) 目標問題 : 每次以亂數產生一 [0,1000] 之整數值, 若該值 >100, 則以同方式繼續產生下一亂數值, 若該值 <=100, 則停止此產生值之程序 所有產生之值必須全部記錄, 並可重複列印所有產生的值 試解 : 定義一夠大之整數陣列, 儲印所有產生之值 疑問 : 整數陣列必須宣告多少才夠大? 以機率考量, 預設固定大小之陣列一定不 足!( 設過大整數陣列, 通常可執行但浪費系統資源 ) 正解 : 以 linked list 逐一記錄產生之值 空串列 (empty list): 加入一 node( 值 349): 349 續加入一 node( 值 723): 723 349 續加入一 node( 值 590): 590 723 349 續加入一 node( 值 82) 並停止 : 82 590 723 349 (a) temp val 1 temp val 1 (b) val n val 1 temp val n+1 val n+1 val n val 1 (c) 圖 1 1

C 語言如何用亂數產生 1 個特定範圍 ( 如 [0,1000]) 的整數?(s3-1.c) -------------- #include <stdlib.h> // 包含定義 srand() 和 rand() #include <time.h> // 包含定義 time() printf("%d\n",rand()%1001); -------------- C 語言如何用亂數產生 n 個特定範圍 ( 如 [10,100]) 的整數?(s3-2.c) -------------- // 定義同 s3-1.c scanf("%d",&n); for (i=0;i<n;i++) printf("%d\n",rand()%91+10); -------------- C 語言如何每次以亂數產生一 [0,1000] 之整數值, 若該值 >100, 則以同方式繼續產生下一亂數值, 若該值 <=100, 則停止此產生值之程序 (s3-3.c) -------------- // 定義同 s3-1.c int i; do{ i=rand()%1001; printf("%d\n",i); while (i>100); -------------- 2

宣告結構 struct ANODE( 其中包含一個整數變數 val, 及一個指向 struct ANODE 的指標變數 next) struct ANODE{ int val; struct ANODE *next; ; struct ANODE *=NULL,*temp;// 串列由 所指, 預設為空串列 temp 圖 2 指標 temp 指向一新產生的 struct ANODE 結構, 並在 val 中存放值 349, 及將 next 指標內容設為 NULL temp->val=349; temp->next=null; temp 349 圖 3 當指標 原指向 NULL( 即 指向空串列 ), 將指標 指向指標 temp 所指, 即完成在空串列中加入第 1 個 node =temp; temp 349 圖 4 3

在空串列中加入第 1 個 node( 值為 349) 的範例 (s3-4.c) struct ANODE{ int val; struct ANODE *next; ; struct ANODE *=NULL,*temp;// 串列由 所指, 預設為空串列 // 建立新 node, 並由 temp 所指, 設定 node 的變數內容 temp->val=349; temp->next=null;//null 要大寫 // 指標 指向指標 temp, 完成在空串列加入第 1 個 node =temp; // 印出串列第 1 個 node 的 val 值 printf( %d %d\n,->val,temp->val); 空串列加入第 1 個 node( 值為亂數產生 [0,1000] 的整數 ) 的範例 (s3-5.c) struct ANODE{ int val; struct ANODE *next; ; struct ANODE *=NULL,*temp;// 串列由 所指, 預設為空串列 // 建立新 node, 並由 temp 所指, 設定 node 的變數內容 temp->val= rand()%1001; temp->next=null; // 指標 指向指標 temp, 完成在空串列加入第 1 個 node =temp; // 印出串列第 1 個 node 的 val 值 printf( %d %d\n,->val,temp->val); 4

在非空串列開頭加入一個新 node( 值為亂數產生 [0,1000] 的整數 )(s3-6.c) // 指令有順序性 temp->next=;//(1) =temp;//(2) val n val 1 (2) (1) temp val n+1 val n+1 val n val 1 圖 5 在非空串列開頭加入 1 個新 node( 值為亂數產生 [0,1000] 的整數 ) 的範例程式 (s3-6.c) struct ANODE{ int val; struct ANODE *next; ; struct ANODE *=NULL,*temp;// 串列由 所指, 預設為空串列 // 先產生一個非空串列 ( 只有一個 node) temp->val= rand()%1001; temp->next=null; =temp; printf( %d %d\n,->val,temp->val); temp->val= rand()%1001; temp->next=null; 5

// 將新產生的 node 加入串列的開頭 temp->next=;//(1) =temp;//(2) // 印出串列中 2 個 node 的值 printf( %d %d\n,->val,->next->val); 適當的印出非空串列的前 2 個 node 之值 //ptr 指向串列的第 2 個 node ptr=->next;// 要宣告 ptr 為指向 struct ANODE 的指標 printf( %d %d\n,->val,ptr->val); ptr 圖 6 6

空串列陸續由串列開頭加入 10 個 node( 值為亂數產生 [0,1000] 的整數 ) (s3-7.c) struct ANODE *=NULL,*temp;// 串列由 所指, 預設為空串列 temp->val= rand()%1001; temp->next=null; // 加入第 1 個 node =temp; // 加入第 2~10 個 node for (i=0;i<9;i++){ temp->val= rand()%1001; temp->next=null; // 將新產生的 node 加入串列的開頭 temp->next=;//(1) =temp;//(2) // 列印第 10,9,..,1 個 node 的值 ptr=; while (ptr!=null){ printf( %d\n,ptr->val); ptr=ptr->next; 7

上一範例整理為函數呼叫 (s3-8.c) struct ANODE *=NULL,*temp;// 串列由 所指, 預設為空串列 //generateanode 函數每次產生一個新 node, 並回傳新 node 的起始位址 struct ANODE * generateanode(){ struct ANODE * ptr; ptr=(struct ANODE *)malloc(sizeof(struct ANODE)); ptr->val= rand()%1001; ptr->next=null; return ptr;// 此為函數的回傳值, 指向配置的記憶體起始位址 //printlist 函數依序列印串列中每個 node 的值 void printlist(){ struct ANODE * ptr; ptr=; while (ptr!=null){ printf( %d\n,ptr->val); ptr=ptr->next; main(){ // 呼叫函數 generateanode() 產生一個 node temp=generateanode(); // 加入第 1 個 node =temp; // 加入第 2~10 個 node for (i=0;i<9;i++){ temp= generateanode(); // 將新產生的 node 加入串列的開頭 8

temp->next=;//(1) =temp;//(2) // 列印第 10,9,..,1 個 node 的值 printlist(); 9

將上一範例重新整理, 使用同一 for 迴圈可產生所有 node 及加入串列 (s3-9.c) main(){ // 加入第 1~10 個 node for (i=0;i<10;i++){ temp= generateanode(); if (==NULL)// 空串列 =temp; else{// 將新產生的 node 加入非空串列的開頭 temp->next=;//(1) =temp;//(2) // 列印第 10,9,..,1 個 node 的值 printlist(); 10

整理上一範例, 將 for 迴圈中的 if 條件移除, 即可逐一產生所有的新 node 及加入串列 (s3-10.c) main(){ // 加入第 1~10 個 node for (i=0;i<10;i++){ temp= generateanode(); // 將新產生的 node 加入串列的開頭 temp->next=;//(1) =temp;//(2) // 列印第 10,9,..,1 個 node 的值 printlist(); 11

每次以亂數產生一 [0,1000] 之整數值, 若該值 >100, 則以同方式繼續產生下一亂數值, 若該值 <=100, 則停止此產生值之程序 所有產生之值必須全部記錄, 並可重複列印所有產生的值 (s3-11.c) // 若加入新 node 之值 >100, 則繼續產生下一新 node do{ temp= generateanode(); // 將新產生的 node 加入串列的開頭 temp->next=;//(1) =temp;//(2) while (temp->val>100); 12