C語言大作業(yè)有序線性表_第1頁
C語言大作業(yè)有序線性表_第2頁
C語言大作業(yè)有序線性表_第3頁
C語言大作業(yè)有序線性表_第4頁
C語言大作業(yè)有序線性表_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、程序設(shè)計(jì)挑戰(zhàn)式課程設(shè)計(jì)報(bào)告作業(yè)名稱:有序線性表學(xué) 院:教育實(shí)驗(yàn)學(xué)院班 級(jí):HC001505學(xué) 號(hào):2015300074姓 名:祖陸晗團(tuán)隊(duì)組成:祖陸晗西北工業(yè)大學(xué)2022年1月9日請(qǐng)?zhí)顚懸韵率?xiàng)內(nèi)容,將表格按頁對(duì)齊(插入空行),勿刪除任何部分。1、問題與背景(描述程序所要解決的問題或應(yīng)用背景) 數(shù)組是程序設(shè)計(jì)中常用的數(shù)據(jù)結(jié)構(gòu),但使用數(shù)組時(shí)必須先定義好數(shù)組長度,這個(gè)長度一經(jīng)定義就是固定不變的,如果事先難以確定元素個(gè)數(shù),則必須把數(shù)組長度定義的足夠大,這將占用許多內(nèi)存。另一方面,在數(shù)組中若要插入或刪除某個(gè)元素,需要移動(dòng)插入點(diǎn)或刪除點(diǎn)后面的所有的數(shù)組元素,這將占用大量的時(shí)間。數(shù)組的這些限制給多數(shù)據(jù)的處理

2、帶來了許多不便。2、開發(fā)工具(列出所使用的開發(fā)工具和第3方開發(fā)庫)Visual C+ 6.03、主要功能(詳細(xì)說明程序的功能)本程序是用鏈表實(shí)現(xiàn)有序線性表的程序,可實(shí)現(xiàn)的基本功能包括:置空,插入,查找,輸出和退出,程序采用菜單界面,用戶只需選擇選項(xiàng)即可實(shí)現(xiàn)相應(yīng)的功能。按照提示進(jìn)行操作,可以實(shí)現(xiàn)諸如置空,刪除等操作,從而實(shí)現(xiàn)數(shù)據(jù)的處理。為了更方便的處理多數(shù)據(jù)問題,需要引入鏈表這種數(shù)據(jù)結(jié)構(gòu)。而本程序正是通過鏈表,指針,數(shù)組,結(jié)構(gòu)體等數(shù)據(jù)結(jié)構(gòu)和相關(guān)文件函數(shù),對(duì)數(shù)組不易實(shí)現(xiàn)的功能進(jìn)行了整合,相對(duì)于數(shù)組,本程序可以處理不知道具體量的數(shù)據(jù),且可以方便的實(shí)現(xiàn)置空表,插入,查找,輸出等功能。4、設(shè)計(jì)內(nèi)容(詳細(xì)

3、描述解決問題的原理和方法、算法、數(shù)據(jù)結(jié)構(gòu)等)1.加入必要的頭文件:#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>2.使用結(jié)構(gòu)體類型定義鏈表:struct num float data;struct num *next;num;3.定義輸出函數(shù):(具體介紹在函數(shù)模塊中展示) 從main 函數(shù)傳遞的head 指針的數(shù)據(jù)開始,依次輸出鏈表數(shù)據(jù),直到遇到NULL 為止。 4.定義置空表函數(shù): 由 main 函數(shù)傳遞head 指針,從head 指針到鏈表

4、節(jié)點(diǎn)末尾依次刪除各個(gè)數(shù)據(jù),同時(shí)釋放內(nèi)存空間。5.定義插入函數(shù): 采用靜態(tài)查找的方法,從 main 函數(shù)傳遞的head 指針的數(shù)據(jù)開始,依次比較鏈表中data成員與searchnum 的大小,采用while 循環(huán)實(shí)現(xiàn)順序查找,保證插入數(shù)據(jù)后,整個(gè)鏈表data 成員依然從大到小排列。6.定義查找函數(shù): 采用靜態(tài)查找的方法,從main 函數(shù)傳遞的head 指針的數(shù)據(jù)開始,依次比較鏈表中data成員與searchnum 的大小,采用while 循環(huán)實(shí)現(xiàn)順序查找,如果找到數(shù)據(jù)就輸出數(shù)據(jù)所在的位置,否則提示沒有找到。7.定義創(chuàng)建函數(shù): 鏈表結(jié)構(gòu)的優(yōu)勢在于可以動(dòng)態(tài)的控制結(jié)構(gòu)的大小,可以在內(nèi)存中不連續(xù)的存儲(chǔ)。

5、本函數(shù)的功能在于不斷創(chuàng)建新的節(jié)點(diǎn)知道滿足用戶的要求為止(用戶可自定義結(jié)束條件)。這一過程通過while循環(huán)和malloc()函數(shù)分配內(nèi)存實(shí)現(xiàn)。定義結(jié)構(gòu)體鏈表指針p 始終指向新開辟的節(jié)點(diǎn),p2 始終指向下一節(jié)點(diǎn),通過循環(huán)完成鏈表的創(chuàng)建工作。本函數(shù)為無參函數(shù),調(diào)用結(jié)束后向main 函數(shù)返回head 頭指針。 8.定義退出函數(shù):通過簡單switch語句退出與確認(rèn)退出。防止誤操作。9.定義歡迎界面對(duì)程序及制作人簡單介紹。5、程序文件與工程名稱(標(biāo)出程序中所有文件名、工程名稱及其說明)文件夾:程序運(yùn)行截圖 文本文檔:個(gè)人信息.C文件:有序線性表應(yīng)用程序:有序線性表/主程序 Word文件:有序線性表程序報(bào)

6、告6、函數(shù)模塊(程序中各個(gè)函數(shù)的原型聲明及其說明)1.插入函數(shù):原型聲明:struct num *insert(struct num *head)說明:采用靜態(tài)查找的方法,從main 函數(shù)傳遞的head 指針的數(shù)據(jù)開始,依次比較鏈表中data成員與searchnum 的大小,采用while 循環(huán)實(shí)現(xiàn)順序查找,保證插入數(shù)據(jù)后,整個(gè)鏈表data 成員依然從大到小排列。2.創(chuàng)建函數(shù):原型聲明:struct num *creat(void)說明:鏈表結(jié)構(gòu)的優(yōu)勢在于可以動(dòng)態(tài)的控制結(jié)構(gòu)的大小,可以在內(nèi)存中不連續(xù)的存儲(chǔ)。本函數(shù)的功能在于不斷創(chuàng)建新的節(jié)點(diǎn)知道滿足用戶的要求為止(用戶可自定義結(jié)束條件)。這一過程

7、通過while。循環(huán)和malloc()函數(shù)分配內(nèi)存實(shí)現(xiàn)。定義結(jié)構(gòu)體鏈表指針p 始終指向新開辟的節(jié)點(diǎn),p2 始終指向下一節(jié)點(diǎn),通過循環(huán)完成鏈表的創(chuàng)建工作。本函數(shù)為無參函數(shù),調(diào)用結(jié)束后向main 函數(shù)返回head 頭指針。3.查找函數(shù):原型聲明:struct num *search(struct num *head)說明:采用靜態(tài)查找的方法,從main 函數(shù)傳遞的head 指針的數(shù)據(jù)開始,依次比較鏈表中data成員與searchnum 的大小,采用while 循環(huán)實(shí)現(xiàn)順序查找,如果找到數(shù)據(jù)就輸出數(shù)據(jù)所在的位置,否則提示沒有找到。4.輸出函數(shù):原型聲明:struct num *print(struc

8、t num *head)說明:從main 函數(shù)傳遞的head 指針的數(shù)據(jù)開始,依次輸出鏈表數(shù)據(jù),直到遇到NULL 為止。5.清屏函數(shù):說明:這是系統(tǒng)自帶函數(shù),需要包含”stdlib.h”頭文件,使用system(“cls”)實(shí)現(xiàn)。6.置空函數(shù):原型聲明:struct num *clean(struct num *head)說明:由main 函數(shù)傳遞head 指針,從head 指針到鏈表節(jié)點(diǎn)末尾依次刪除各個(gè)數(shù)據(jù),同時(shí)釋放內(nèi)存空間。7.main函數(shù):說明:系統(tǒng)主函數(shù),負(fù)責(zé)輸入輸出和各函數(shù)的調(diào)用,采用while(1)實(shí)現(xiàn)連續(xù)循環(huán),通過switch語句選擇調(diào)用相應(yīng)的函數(shù)實(shí)現(xiàn)功能。7、使用說明(運(yùn)行程序

9、的小型說明書)初次運(yùn)行程序時(shí)必須先初始化數(shù)據(jù),用戶可自定義鏈表創(chuàng)建結(jié)束條件,并從小到大依次輸入一組數(shù)據(jù),最后一個(gè)數(shù)據(jù)是結(jié)束的標(biāo)志,不計(jì)入鏈表的數(shù)據(jù)內(nèi)容。輸入完成后回車,系統(tǒng)自動(dòng)輸出數(shù)據(jù),用戶可判斷輸入的數(shù)據(jù)是否正確。接下來將顯示菜單部分,共分基本功能和附加功能,用戶通過輸入功能項(xiàng)目前的序號(hào)來啟動(dòng)對(duì)應(yīng)功能。“置空表”是將鏈表數(shù)據(jù)刪除,同時(shí)釋放所占的內(nèi)存;“插入”是用戶可在原來的鏈表上新加入一個(gè)或多個(gè)數(shù)據(jù),系統(tǒng)將自動(dòng)排序;“刪除”是用戶將原有數(shù)據(jù)清空,同時(shí)釋放內(nèi)存;“查找”可以幫助用戶確認(rèn)某數(shù)據(jù)是否在鏈表中;“輸出”是將當(dāng)年內(nèi)存中的鏈表數(shù)據(jù)依次在屏幕上顯示;用戶可使用“退出”離開程序。程序?qū)⒀h(huán)顯

10、示功能菜單,直到用戶退出為止。8、程序開發(fā)總結(jié)(簡要敘述編寫本作業(yè)的收獲與思考)通過這次大作業(yè),我感受到了編程的魅力。其實(shí)鏈表對(duì)于我這種初學(xué)者來說真的不容易,從確定選題到自學(xué)相關(guān)知識(shí),再到自己一點(diǎn)一點(diǎn)的編程,期間遇到了很多困難,但還是堅(jiān)持了下來。最終編譯成功的那一刻,心中真的是充滿了成就感。這次大作業(yè)的完成不僅讓我的知識(shí)結(jié)構(gòu)更加完善,更鍛煉了我的毅力,讓我感受到了編程的魅力。希望自己在未來的日子里把編程繼續(xù)下去,不斷學(xué)習(xí),不斷追求新的成功的喜悅!9、運(yùn)行截圖(附上程序運(yùn)行的截圖畫面,至少有1幅,截圖越翔實(shí)得分越高)(1)這是歡迎界面,程序運(yùn)行后就可以看見:(2)按照提示進(jìn)行操作,就可以成功創(chuàng)建

11、一個(gè)鏈表:(3)插入并輸入的操作界面:(4)查找功能的操作界面:(5)置空和退出界面:10、源程序(附上程序源代碼,若是多個(gè)文件,標(biāo)出文件名)#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#define LEN sizeof(struct num)int n; /全局變量,用于記錄鏈表的數(shù)據(jù)個(gè)數(shù)struct num /使用結(jié)構(gòu)體類型定義鏈表 float data;struct num *next;num;struct num *print(st

12、ruct num *head) /定義輸出函數(shù) struct num *p; int i;char a; printf("n 目前線性表中的數(shù)據(jù)有%d 個(gè),如下所示:n",n); p=head; i=0; if(head!=NULL) do if(i%5=0) printf("n");i+; printf("%gn",p->data); /數(shù)據(jù)輸出 p=p->next; while(p!=NULL); /采用%g 輸出,可以不輸出無意義的0 printf("n"); printf("按回車鍵繼

13、續(xù)n"); a=getchar(); return(head); /返回頭指針struct num *clean(struct num *head) /定義置空表函數(shù), struct num *p; char i; while(head->next!=NULL) p=head->next; head->next=head->next->next; free(p); /使用free(*)函數(shù)釋放內(nèi)存 printf("鏈表已經(jīng)成功置空!"); head=NULL; printf("按回車鍵繼續(xù)"); i=getchar

14、(); return(head);struct num *insert(struct num *head) /定義插入函數(shù) struct num *p0,*p1,*p2,*in; p1=head; printf("請(qǐng)輸入要插入的數(shù)據(jù):n"); in=(struct num *)malloc(LEN); /使用malloc(LEN)分配內(nèi)存空間 p0=in; scanf("%f",&in->data); if(head=NULL) head=p0;p0->next=NULL; else while (p0->data>p1-

15、>data)&&(p1->next!=NULL) /查找符合排列順序的插入點(diǎn) p2=p1;p1=p1->next; if(p0->data<=p1->data) if(head=p1) head=p0; else p2->next=p0;p0->next=p1; else p1->next=p0;p0->next=NULL; /如果插入點(diǎn)是最后一個(gè),就用NULL 使鏈表結(jié)束 n=n+1; return(head); /返回頭指針struct num *search(struct num *head) /定義查找函數(shù) t

16、ypedef int COUNT; COUNT i=0; struct num *p; float searchdata; printf("請(qǐng)輸入你想要查找的數(shù)據(jù):n"); scanf("%f",&searchdata); if(head=NULL) printf("n 這是一個(gè)空表,請(qǐng)先建立,然后再刪除!"); p=head; while(searchdata!=p->data)&&(p->next!=NULL) p=p->next;i+; /順序線性查找 if(searchdata=p-&

17、gt;data) printf("%g 已經(jīng)找到。這是鏈表中的第%d 個(gè)數(shù)據(jù)。n",searchdata,i+1); else printf("沒有在鏈表中找到%g 請(qǐng)?jiān)俅未_認(rèn)數(shù)據(jù)!n",searchdata); return(head);struct num *creat(void) /定義創(chuàng)建函數(shù) struct num *head; struct num *p1,*p2; n=0; float i; p1=p2=(struct num * )malloc(LEN); printf("第一次使用本程序,請(qǐng)創(chuàng)建鏈表.n"); prin

18、tf("請(qǐng)輸入一個(gè)數(shù)字作為鏈表結(jié)束創(chuàng)建的條件:n請(qǐng)注意:不能用要輸入的鏈表的數(shù)據(jù)作為該結(jié)束條件!n"); scanf("%f",&i); printf("請(qǐng)從小到大輸入數(shù)據(jù)來初始化鏈表(注意從小到大,用空格隔開)n"); scanf("%f",&p1->data); head=NULL; while(p1->data!=i) / 當(dāng)輸入為i 時(shí)不再開辟新區(qū)域 n=n+1; if(n=1) head=p1; else p2->next=p1; p2=p1; p1=(struct nu

19、m * )malloc(LEN); scanf("%f",&p1->data); p2->next=NULL; return(head);void vanish(struct num *head) /定義退出函數(shù) char i; printf("確定退出? (輸入Y確認(rèn)退出,輸入N返回)n"); /退出時(shí)提醒 i=getchar(); switch (i) /不區(qū)分大小寫 case 'Y': case 'y':exit(1);break; case 'N': case 'n':;break; void info() /定義歡迎信息 printf("nnnnnnnt"); printf(&q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論