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

下載本文檔

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

文檔簡介

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

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

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

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

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

7、過程通過while。循環(huán)和malloc()函數(shù)分配內(nèi)存實現(xiàn)。定義結(jié)構(gòu)體鏈表指針p 始終指向新開辟的節(jié)點,p2 始終指向下一節(jié)點,通過循環(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)實現(xiàn)順序查找,如果找到數(shù)據(jù)就輸出數(shù)據(jù)所在的位置,否則提示沒有找到。4.輸出函數(shù):原型聲明:struct num *print(str

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

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

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

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

12、struct num *head) /定義輸出函數(shù) struct num *p; int i;char a; printf("n 目前線性表中的數(shù)據(jù)有%d 個,如下所示: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=getch

14、ar(); return(head);struct num *insert(struct num *head) /定義插入函數(shù) struct num *p0,*p1,*p2,*in; p1=head; printf("請輸入要插入的數(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>p

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

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

17、->data) printf("%g 已經(jīng)找到。這是鏈表中的第%d 個數(shù)據(jù)。n",searchdata,i+1); else printf("沒有在鏈表中找到%g 請再次確認(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("第一次使用本程序,請創(chuàng)建鏈表.n"); pr

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

19、num * )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"); /退出時提醒 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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論