日本中文字幕有码在线视频三级,欧美视频一区亚洲不要,久久久综合九色综合88,久久综合久久首页

          更三高考訂閱頁(yè)

          最新數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目五篇(通用)

          Ai高考 · 范文大全
          2023-05-25
          更三高考院校庫(kù)

          在日常的學(xué)習(xí)、工作、生活中,肯定對(duì)各類(lèi)范文都很熟悉吧。那么我們?cè)撊绾螌?xiě)一篇較為完美的范文呢?下面是小編為大家收集的優(yōu)秀范文,供大家參考借鑒,希望可以幫助到有需要的朋友。

          數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目篇一

          課程設(shè)計(jì)報(bào)告

          題 目: 一元多項(xiàng)式計(jì)算 專(zhuān) 業(yè): 信息管理與信息系統(tǒng) 班 級(jí): 2012級(jí)普本班 學(xué) 號(hào): 201201011367 姓 名: 左帥帥 指導(dǎo)老師: 郝慎學(xué) 時(shí) 間:

          一、課程設(shè)計(jì)題目分析

          本課程設(shè)計(jì)要求利用c語(yǔ)言或c++編寫(xiě),本程序?qū)崿F(xiàn)了一元多項(xiàng)式的加法、減法、乘法、除法運(yùn)算等功能。

          二、設(shè)計(jì)思路

          本程序采用c語(yǔ)言來(lái)完成課程設(shè)計(jì)。

          1、首先,利用順序存儲(chǔ)結(jié)構(gòu)來(lái)構(gòu)造兩個(gè)存儲(chǔ)多項(xiàng)式a(x)和 b(x)的結(jié)構(gòu)。

          2、然后把輸入,加,減,乘,除運(yùn)算分成五個(gè)主要的模塊:實(shí)現(xiàn)多項(xiàng)式輸入模塊、實(shí)現(xiàn)加法的模塊、實(shí)現(xiàn)減法的模塊、實(shí)現(xiàn)乘法的模塊、實(shí)現(xiàn)除法的模塊。

          3、然后各個(gè)模塊里面還要分成若干種情況來(lái)考慮并通過(guò)函數(shù)的嵌套調(diào)用來(lái)實(shí)現(xiàn)其功能,盡量減少程序運(yùn)行時(shí)錯(cuò)誤的出現(xiàn)。

          4、最后編寫(xiě)main()主函數(shù)以實(shí)現(xiàn)對(duì)多項(xiàng)式輸入輸出以及加、減、乘、除,調(diào)試程序并將不足的地方加以修改。

          三、設(shè)計(jì)算法分析

          1、相關(guān)函數(shù)說(shuō)明:

          (1)定義數(shù)據(jù)結(jié)構(gòu)類(lèi)型為線(xiàn)性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)類(lèi)型變量

          typedef struct polynomial{}

          (2)其他功能函數(shù)

          插入函數(shù)void insert(polyn p,polyn h)

          比較函數(shù)int compare(polyn a,polyn b)

          建立一元多項(xiàng)式函數(shù)polyn create(polyn head,int m)

          求解并建立多項(xiàng)式a+b,polyn add(polyn pa,polyn pb)

          求解并建立多項(xiàng)式a-b,polyn subtract(polyn pa,polyn pb)2

          求解并建立多項(xiàng)式a*b,polyn multiply(polyn pa,polyn pb)

          求解并建立多項(xiàng)式a/b,void device(polyn pa,polyn pb)

          輸出函數(shù)輸出多項(xiàng)式,void print(polyn p)

          銷(xiāo)毀多項(xiàng)式函數(shù)釋放內(nèi)存,void destroy(polyn p)

          主函數(shù),void main()

          2、主程序的流程基函數(shù)調(diào)用說(shuō)明(1)typedef struct polynomial {

          float coef;

          int expn;

          struct polynomial *next;} *polyn,polynomial;

          在這個(gè)結(jié)構(gòu)體變量中coef表示每一項(xiàng)前的系數(shù),expn表示每一項(xiàng)的指數(shù),polyn為結(jié)點(diǎn)指針類(lèi)型,屬于抽象數(shù)據(jù)類(lèi)型通常由用戶(hù)自行定義,polynomial表示的是結(jié)構(gòu)體中的數(shù)據(jù)對(duì)象名。

          (2)當(dāng)用戶(hù)輸入兩個(gè)一元多項(xiàng)式的系數(shù)和指數(shù)后,建立鏈表,存儲(chǔ)這兩個(gè)多項(xiàng)式,主要說(shuō)明如下:

          polyn createpolyn(polyn head,int m)建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元多項(xiàng)式

          p=head=(polyn)malloc(sizeof(struct polynomial));為輸入的多項(xiàng)式申請(qǐng)足夠的存儲(chǔ)空間

          p=(polyn)malloc(sizeof(struct polynomial));建立新結(jié)點(diǎn)以接收數(shù)據(jù)

          insert(p,head);調(diào)用insert函數(shù)插入結(jié)點(diǎn)

          這就建立一元多項(xiàng)式的關(guān)鍵步驟

          (3)由于多項(xiàng)式的系數(shù)和指數(shù)都是隨即輸入的,所以根據(jù)要求需要對(duì)多項(xiàng)式按指數(shù)進(jìn)行降冪排序。在這個(gè)程序模塊中,使用鏈表,根據(jù)對(duì)指數(shù)大小的比較,對(duì)各種情況進(jìn)行處理,此處由于反復(fù)使用指針對(duì)各個(gè)結(jié)點(diǎn)進(jìn)行定位,找到合適的位置再利用void insert(polyn p,polyn h)進(jìn)行插入操作。(4)加、減、乘、除、的算法實(shí)現(xiàn):

          在該程序中,最關(guān)鍵的一步是實(shí)現(xiàn)四則運(yùn)算和輸出,由于加減算法原則是一樣,減法可通過(guò)系數(shù)為負(fù)的加法實(shí)現(xiàn);對(duì)于乘除算法的大致流程都是:首先建立多項(xiàng)式a*b,a/b,然后使用鏈表存儲(chǔ)所求出的乘積,商和余數(shù)。這就實(shí)現(xiàn)了多項(xiàng)式計(jì)算模塊的主要功能。

          (5)另一個(gè)子函數(shù)是輸出函數(shù) printpolyn();

          輸出最終的結(jié)果,算法是將最后計(jì)算合并的鏈表逐個(gè)結(jié)點(diǎn)依次輸出,便得到整鏈表,也就是最后的計(jì)算式計(jì)算結(jié)果。由于考慮各個(gè)結(jié)點(diǎn)的指數(shù)情況不同,分別進(jìn)行了判斷處理。

          四、程序新點(diǎn)

          通過(guò)多次寫(xiě)程序,發(fā)現(xiàn)在程序在控制臺(tái)運(yùn)行時(shí)總是黑色的,本次寫(xiě)程序就想著改變一下,于是經(jīng)過(guò)查資料利用system(“color e0”);可以函數(shù)解決,這里“e0,”e是控制臺(tái)背景顏色,0是控制臺(tái)輸出字體顏色。

          五、設(shè)計(jì)中遇到的問(wèn)題及解決辦法

          首先是,由于此次課程設(shè)計(jì)里使用指針使用比較多,自己在指針多的時(shí)候易腦子混亂出錯(cuò),對(duì)于此問(wèn)題我是采取比較笨的辦法在稿紙上寫(xiě)明白后開(kāi)始進(jìn)行 4

          代碼編寫(xiě)。

          其次是,在寫(xiě)除法模塊時(shí)比較復(fù)雜,自己通過(guò)查資料最后成功寫(xiě)出除法模塊功能。

          最后是,前期分析不足開(kāi)始急于寫(xiě)代碼,中途出現(xiàn)各種問(wèn)題,算是給自己以后設(shè)計(jì)時(shí)的一個(gè)經(jīng)驗(yàn)吧。

          六、測(cè)試(程序截圖)

          1.數(shù)據(jù)輸入及主菜單

          2.加法和減法模塊

          3.乘法和除法模塊

          七、總結(jié)

          通過(guò)本次應(yīng)用c語(yǔ)言設(shè)計(jì)一元多項(xiàng)式基本計(jì)算程序,使我更加鞏固了c語(yǔ)言程序設(shè)計(jì)的知識(shí),以前對(duì)指針這一點(diǎn)使用是比較模糊,現(xiàn)在通過(guò)此次課程設(shè)計(jì)對(duì)指針理解的比較深刻了。而且對(duì)于數(shù)據(jù)結(jié)構(gòu)的相關(guān)算法和函數(shù)的調(diào)用方面知識(shí)的加深。本次的課程設(shè)計(jì),一方面提高了自己獨(dú)立思考處理問(wèn)題的能力;另一方面使自己再設(shè)計(jì)開(kāi)發(fā)程序方面有了一定的小經(jīng)驗(yàn)和想法,對(duì)自己以后學(xué)習(xí)其他語(yǔ)言程序設(shè)計(jì)奠定了一定的基礎(chǔ)。

          八、指導(dǎo)老師評(píng)語(yǔ)及成績(jī)

          附錄:(課程設(shè)計(jì)代碼)

          #include

          #include

          #include

          typedef struct polynomial {

          float coef;6

          int expn;

          struct polynomial *next;} *polyn,polynomial;

          //polyn為結(jié)點(diǎn)指針類(lèi)型 void insert(polyn p,polyn h){

          coef==0)free(p);

          //系數(shù)為0的話(huà)釋放結(jié)點(diǎn)

          else

          {polyn q1,q2;

          next;

          expn

          expn)//查找插入位置

          {

          next;}

          expn)//將指數(shù)相同相合并 {

          coef;

          free(p);

          coef)//系數(shù)為0的話(huà)釋放結(jié)點(diǎn)

          next;free(q2);}

          }next=p;

          }//指數(shù)為新時(shí)將結(jié)點(diǎn)插入

          } 7

          } //建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元多項(xiàng)式 polyn create(polyn head,int m){

          int i;

          polyn p;

          p=head=(polyn)malloc(sizeof(struct polynomial));

          next=null;

          for(i=0;i

          {p=(polyn)malloc(sizeof(struct polynomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)

          printf(“請(qǐng)輸入第%d項(xiàng)的系數(shù)與指數(shù):”,i+1);

          expn);

          insert(p,head);

          //調(diào)用insert函數(shù)插入結(jié)點(diǎn)

          }return head;} //銷(xiāo)毀多項(xiàng)式p void destroy(polyn p){

          polyn q1,q2;

          next;8

          next;

          next)

          {free(q1);

          q1=q2;//指針后移

          next;

          } } //輸出多項(xiàng)式p int print(polyn p){

          next;

          int flag=1;//項(xiàng)數(shù)計(jì)數(shù)器

          if(!q)//若多項(xiàng)式為空,輸出0

          {putchar('0');

          printf(“n”);

          return;

          }while(q)

          {0&&flag!=1)putchar('+');//系數(shù)大于0且不是第一項(xiàng) 9

          coef!=-1)//系數(shù)非1或-1的普通情況

          {coef);

          expn==1)putchar('x');

          expn);

          }else

          {coef==1){

          expn)putchar('1');

          expn==1)putchar('x');

          expn);}

          coef==-1){

          expn)printf(“-1”);

          expn==1)printf(“-x”);

          expn);}

          }next;

          flag++;

          }printf(“n”);} int compare(polyn a,polyn b){

          if(a&&b)

          {expn)return 1;

          expn

          expn)return-1;

          else return 0;

          }else if(!a&&b)return-1;//a多項(xiàng)式已空,但b多項(xiàng)式非空

          else return 1;//b多項(xiàng)式已空,但a多項(xiàng)式非空 } //求解并建立多項(xiàng)式a+b,返回其頭指針 polyn add(polyn pa,polyn pb){

          next;

          next;

          polyn headc,hc,qc;

          hc=(polyn)malloc(sizeof(struct polynomial));//建立頭結(jié)點(diǎn) 11

          next=null;

          headc=hc;

          while(qa||qb){

          qc=(polyn)malloc(sizeof(struct polynomial));

          switch(compare(qa,qb))

          {case 1:

          coef;

          expn;

          next;

          break;

          case 0:

          coef;

          expn;

          next;

          next;

          break;

          case-1:

          coef;

          expn;

          next;

          break;12

          }coef!=0)

          {next;

          next=qc;

          hc=qc;

          }else free(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn)

          }return headc;} //求解并建立多項(xiàng)式a-b,返回其頭指針 polyn subtract(polyn pa,polyn pb){

          polyn h=pb;

          next;

          polyn pd;

          while(p)//將pb的系數(shù)取反

          next;}

          pd=add(pa,h);

          next)

          //恢復(fù)pb的系數(shù)

          coef*=-1;13

          return pd;} //求解并建立多項(xiàng)式a*b,返回其頭指針 polyn multiply(polyn pa,polyn pb){

          polyn hf,pf;

          next;

          next;

          hf=(polyn)malloc(sizeof(struct polynomial));//建立頭結(jié)點(diǎn)

          next=null;

          next)

          {next)

          {pf=(polyn)malloc(sizeof(struct polynomial));

          coef;

          expn;

          insert(pf,hf);//調(diào)用insert函數(shù)以合并指數(shù)相同的項(xiàng)

          }}

          return hf;}

          //求解并建立多項(xiàng)式a/b,返回其頭指針 void device(polyn pa,polyn pb){

          polyn hf,pf,temp1,temp2;

          next;

          next;

          hf=(polyn)malloc(sizeof(struct polynomial));//建立頭結(jié)點(diǎn),存儲(chǔ)商

          next=null;

          pf=(polyn)malloc(sizeof(struct polynomial));//建立頭結(jié)點(diǎn),存儲(chǔ)余數(shù)

          next=null;

          temp1=(polyn)malloc(sizeof(struct polynomial));

          next=null;

          temp2=(polyn)malloc(sizeof(struct polynomial));

          next=null;

          temp1=add(temp1,pa);

          expn)

          {next=(polyn)malloc(sizeof(struct polynomial));

          coef);

          expn);

          next,hf);

          pa=subtract(pa,multiply(pb,temp2));15

          next;

          next=null;

          }pf=subtract(temp1,multiply(hf,pb));

          pb=temp1;

          printf(“商是:”);

          print(hf);

          printf(“余數(shù)是:”);

          print(pf);} void main(){ int choose=1;int m,n,flag=0;system(“color e0”);polyn pa=0,pb=0,pc,pd,pf;//定義各式的頭指針,pa與pb在使用前付初值null printf(“請(qǐng)輸入a(x)的項(xiàng)數(shù):”);scanf(“%d”,&m);printf(“n”);pa=create(pa,m);//建立多項(xiàng)式a printf(“n”);printf(“請(qǐng)輸入b(x)的項(xiàng)數(shù):”);16

          scanf(“%d”,&n);printf(“n”);pb=create(pb,n);//建立多項(xiàng)式b printf(“n”);printf(“**********************************************n”);printf(“*

          多項(xiàng)式操作菜單

          printf(”**********************************************n“);printf(”tt 1.輸出操作n“);printf(”tt 2.加法操作n“);printf(”tt 3.減法操作n“);printf(”tt 4.乘法操作n“);printf(”tt 5.除法操作n“);printf(”tt 6.退出操作n“);printf(”**********************************************n“);while(choose){

          printf(”執(zhí)行操作:“);

          scanf(”%d“,&flag);

          switch(flag)

          {case 1:

          printf(”多項(xiàng)式a(x):“);print(pa);*n”);

          printf(“多項(xiàng)式b(x):”);print(pb);

          break;

          case 2:

          pc=add(pa,pb);

          printf(“多項(xiàng)式a(x)+b(x):”);print(pc);

          destroy(pc);break;

          case 3:

          pd=subtract(pa,pb);

          printf(“多項(xiàng)式a(x)-b(x):”);print(pd);

          destroy(pd);break;

          case 4:

          pf=multiply(pa,pb);

          printf(“多項(xiàng)式a(x)*b(x):”);

          print(pf);

          destroy(pf);

          break;

          case 5:

          device(pa,pb);18

          break;

          case 6:

          exit(0);

          break;

          } }

          destroy(pa);

          destroy(pb);}

          數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目篇二

          課 程 設(shè) 計(jì) 任 務(wù) 書(shū)

          信息 學(xué)院 信息管理與信息系統(tǒng) 專(zhuān)業(yè) 09級(jí)1班 班 孫鵬一、二、課程設(shè)計(jì)題目: 迷宮求解、一元多項(xiàng)式

          課程設(shè)計(jì)主要參考資料: 數(shù)據(jù)結(jié)構(gòu)(c語(yǔ)言版)嚴(yán)蔚敏、吳偉民 編著

          數(shù)據(jù)結(jié)構(gòu)題集(c語(yǔ)言版)嚴(yán)蔚敏、吳偉民、米寧 編著

          數(shù)據(jù)結(jié)構(gòu)課件

          三、設(shè)計(jì)應(yīng)解決下列各主要問(wèn)題:

          1.實(shí)現(xiàn)迷宮的路徑求解,并輸出最終路徑,標(biāo)記走過(guò)卻未選擇的路徑和最終選擇的路徑

          2.對(duì)一元多項(xiàng)式實(shí)現(xiàn)加法,減法,乘法,求導(dǎo)的計(jì)算,并按指數(shù)由大到小排序輸出

          四、課程設(shè)計(jì)相關(guān)附件(如:圖紙、軟件等):

          五、命題發(fā)出日期:2011-3-15 設(shè)計(jì)應(yīng)完成日期: 2010-6-20

          設(shè)計(jì)指導(dǎo)教師(簽章):

          系主任(簽章):

          指導(dǎo)教師對(duì)課程設(shè)計(jì)的評(píng)語(yǔ)

          指導(dǎo)教師(簽章):

          年 月 日

          山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          課程設(shè)計(jì)1 迷宮問(wèn)題

          一、需求分析:

          1.2.3.4.以二維數(shù)組maze[][]表示迷宮

          用戶(hù)輸入迷宮的數(shù)據(jù):構(gòu)建迷宮,行數(shù)m,列數(shù)n 迷宮的入口位置和出口位置可由用戶(hù)隨時(shí)設(shè)定

          若設(shè)定的迷宮存在通路,則以長(zhǎng)方陣形式將迷宮及其通路輸出到標(biāo)準(zhǔn)輸出文件(即終端)上,其中,字符“#”表示障礙,字符“*”表示路徑上的位置,字符“@”表示“死胡同”,即曾經(jīng)途徑然而不能到達(dá)出口的位置,余者用空格符印出。若設(shè)定的迷宮不存在通路,則報(bào)告相應(yīng)信息。

          5.本程序只求出一條成功的通路。然而,只需要對(duì)迷宮求解的函數(shù)做小量修改,便可求得全部路徑。

          二、概要設(shè)計(jì):

          抽象數(shù)據(jù)類(lèi)型線(xiàn)性表的定義如下: ⒈ 設(shè)計(jì)棧的抽象數(shù)據(jù)類(lèi)型定義:

          adt stack { 數(shù)據(jù)對(duì)象:d={ai:|ai∈positionset,i=1n,n≥0} 數(shù)據(jù)關(guān)系:r1={|ai-1,ai∈d,i=2,n} 基本操作:的初始化s gettop(s,&e)素

          push(&s,e)pop(&s,e)

          返回其值 }adt stack;

          ⒉ 迷宮的抽象數(shù)據(jù)類(lèi)型定義: adt maze{ 數(shù)據(jù)對(duì)象:d:={aij,start,end|aij,start,end∈{} 0≤i≤m+2,0≤j≤n+2,m,n≥0}

          數(shù)據(jù)關(guān)系:r={} row={|ai-1,aij∈d i=1,,m+2,j=1,,n+2}

          第1頁(yè)

          操作結(jié)果

          構(gòu)造一個(gè)空棧,完成棧用e返回棧s的棧頂元將新的元素e壓入棧頂 刪除棧頂元素,并用einitstack(&s)

          山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          col={|aijaij-1∈d}

          基本操作: masepath(int i,int j,int m,int n,sqstack &s)初始條件:已知目前迷宮狀態(tài), 傳過(guò)起始位置,和終止位置 操作結(jié)果:搜索迷宮,用sqstack s返回搜索所得路徑。如不存在,返回2 }adt maze

          三、詳細(xì)設(shè)計(jì):

          #include

          #include

          #include

          #define overflow-2 #define ok 1 #define error 0 #define true 1 #define false 0 #define stack_init_size 100 //存儲(chǔ)空間初始量 #define stack_increment 10//存儲(chǔ)空間初始增量

          typedef int status;

          typedef struct { int r;int c;}posttype;//坐標(biāo)位置

          迷宮的r行c列 typedef struct { int ord;//通道塊在路徑上的序號(hào)

          posttype seat;//通道塊的當(dāng)前坐標(biāo)位置

          int di;//通道塊指向下一通道塊的方向 }selemtype;//棧元素的類(lèi)型 typedef struct { selemtype *base;//棧底指針

          selemtype *top;//棧頂指針

          int stacksize;//棧的最大容量 }stack;//棧的類(lèi)型

          第2頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          status initstack(stack &s)//初始化棧 { =(selemtype *)malloc(stack_init_size*sizeof(selemtype));if(!)

          exit(overflow);//存儲(chǔ)分配失敗;=;ize=stack_init_size;return ok;}//initstack

          status stackempty(stack s)//判斷棧是否為空,如果為空返回true,否則返回false { if(==)

          return true;

          return false;}//stackempty

          =ize){

          =(selemtype*)realloc(,(ize+stack_increment)*sizeof(selemtype));

          if(!)

          exit(overflow);

          =+ize;

          ize+=stack_increment;} *++=e;return ok;}//push

          status pop(stack &s,selemtype &e)//刪除棧頂元素存入e { if(==)

          return error;e=*--;

          第3頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          return ok;}//pop

          status destroystack(stack &s)//銷(xiāo)毀棧 { free();=;return ok;}//destroystack

          // #define maxlen 20//迷宮包括外墻最大行列數(shù)目 typedef struct{

          int r;

          int c;

          char adr[maxlen][maxlen];//可取' ''*' '@' '#' }mazetype;

          //迷宮類(lèi)型

          status initmaze(mazetype &maze){ //初始化迷宮若成功返回true,否則返回false

          int m,n,i,j,k=1;

          printf(“輸入迷口的行數(shù)和列數(shù): ”);

          scanf(“%d%d”,&maze.r,&maze.c);//迷宮行和列數(shù)

          for(i=0;i<=maze.c+1;i++){//迷宮行外墻

          [0][i]='#';

          [maze.r+1][i]='#';

          }//for

          for(i=0;i<=maze.r+1;i++){//迷宮列外墻

          [i][0]='#';

          [i][maze.c+1]='#';

          }for(i=1;i<=maze.r;i++)

          for(j=1;j<=maze.c;j++)

          [i][j]=' ';//初始化迷宮

          printf(“輸入障礙物%d的坐標(biāo)(以坐標(biāo)(0,0)結(jié)束輸入): ”,k);

          scanf(“%d%d”,&m,&n);

          k++;

          while(m!=0)

          {maze.c)//越界

          第4頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          exit(error);

          [m][n]='#';//迷宮障礙用'#'標(biāo)記

          printf(“輸入障礙物%d的坐標(biāo)(以坐標(biāo)(0,0)結(jié)束輸入): ”,k);

          scanf(“%d%d”,&m,&n);

          k++;

          }return ok;}//initmaze

          status pass(mazetype maze,posttype curpos){ //當(dāng)前位置可通則返回ture,否則返回false

          if([curpos.r][curpos.c]==' ')//可通

          return true;

          else

          return false;}//pass

          status footprint(mazetype &maze,posttype curpos){ //若走過(guò)并且可通返回true,否則返回false //在返回之前銷(xiāo)毀棧s

          [curpos.r][curpos.c]='*';//“*”表示可通

          return ok;}//footprint

          posttype nextpos(posttype &curpos,int i){ //指示并返回下一位置的坐標(biāo)

          posttype cpos;

          cpos=curpos;

          switch(i){

          //1.2.3.4分別表示東,南,西,北方向

          case 1 : cpos.c+=1;break;

          case 2 : cpos.r+=1;break;

          case 3 : cpos.c-=1;break;

          case 4 : cpos.r-=1;break;

          default: exit(error);

          }return cpos;}//nextpos

          status markprint(mazetype &maze,posttype curpos){ //曾走過(guò)但不是通路標(biāo)記并返回ok

          第5頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          [curpos.r][curpos.c]='@';//“@”表示曾走過(guò)但不通

          return ok;}//markprint

          void printmaze(mazetype &maze)//將最后標(biāo)記好的迷宮輸出 { int i,j;printf(“n輸出迷宮的路徑:n”);for(i=0;i<=maze.c+1;i++)

          printf(“%4d”,i);//輸出列數(shù)

          printf(“n”);for(i=0;i<=maze.r+1;i++){

          printf(“%d”,i);//輸出行數(shù)

          for(j=0;j<=maze.c+1;j++)

          printf(“%4c”,[i][j]);//輸出迷宮

          printf(“n”);} }//printmaze

          status mazepath(mazetype &maze,posttype start,posttype end)//若迷宮從入口start到end的通道則求得一條存放在棧中 { stack s;//初始化棧

          posttype curpos;int curstep;selemtype e;initstack(s);curpos=start;curstep=1;do {

          if(pass(maze,curpos))//當(dāng)前位置可通過(guò)而未曾走過(guò)留下足跡

          {footprint(maze,curpos);

          =curstep;=curpos;=1;

          push(s,e);//加入棧路徑中

          if(curpos.r==end.r && curpos.c==end.c)//到達(dá)出口返回true

          {第6頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          if(!destroystack(s))

          exit(overflow);

          else return true;

          }else

          {curpos=nextpos(curpos,1);//下一位置是當(dāng)前位置

          curstep++;//探索下一步

          }}//if

          else//當(dāng)前位置不能通過(guò)

          {if(!stackempty(s))

          {pop(s,e);//提取前一位置

          while(==4 &&!stackempty(s))//4個(gè)方向都不能通過(guò)則留下記號(hào)@ 提取前一個(gè)位置進(jìn)行判斷是否是能通過(guò)

          {markprint(maze,);

          pop(s,e);

          }if(<4)//換下一個(gè)方向探索

          設(shè)定當(dāng)前位置為該新方向上的鄰位

          {++;

          push(s,e);

          curpos=nextpos(,);

          }}//if

          } }while(!stackempty(s));if(!destroystack(s))

          exit(error);else return false;}//mazepath

          int main(){ mazetype maze;posttype start,end;char c;

          第7頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          do {

          printf(“**********迷宮求解**********n”);

          if(!initmaze(maze))

          {printf(“n 初始化迷宮失?。?”);

          exit(error);

          }do

          {printf(“n請(qǐng)輸入入口的坐標(biāo):”);

          scanf(“%d%d”,&start.r,&start.c);//輸入入口坐標(biāo)

          maze.c)

          printf(“n輸入錯(cuò)誤,請(qǐng)重新輸入入口的坐標(biāo)!n”);

          continue;

          }maze.c);

          do

          {printf(“n請(qǐng)輸入出口的坐標(biāo):”);//輸入出口的坐標(biāo)

          scanf(“%d%d”,&end.r,&end.c);

          maze.c)

          printf(“n輸入錯(cuò)誤,請(qǐng)重新輸入出口坐標(biāo)!n”);

          continue;

          }maze.c);

          if(!mazepath(maze,start,end))

          printf(“n不能找到一條路徑!!n”);

          else printmaze(maze);//輸出迷宮

          printf(“是否要繼續(xù)?(y/n):”);

          scanf(“%s”,&c);} while(c=='y' || c=='y');}。測(cè)試結(jié)果:

          第8頁(yè)

          四、山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          課程設(shè)計(jì)2 一元多項(xiàng)式

          一、需求分析:

          第9頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          1.2.3.首先定義一個(gè)結(jié)構(gòu)體,其中定義一元多項(xiàng)式中的兩個(gè)參數(shù):系數(shù)和指數(shù)和鏈表中結(jié)點(diǎn)的指針域;

          然后一一羅列每個(gè)在主程序中用到的函數(shù),并一一實(shí)現(xiàn); 最后在主程序中主要完成用戶(hù)的輸入和相關(guān)函數(shù)的調(diào)用。

          二、概要設(shè)計(jì):

          void insert(ploylist *head,ploylist *input)

          //查找位置插入新鏈節(jié)的函數(shù),且讓輸入的多項(xiàng)式呈降序排列 ploylist *creat(char ch)//輸入多項(xiàng)式

          ploylist *add(ploylist *head,ploylist *pre)//多項(xiàng)式相加,head為第一個(gè)多項(xiàng)式建立的鏈表表頭,pre為第二個(gè)多項(xiàng)式建立的鏈表表頭

          ploylist *sub(ploylist *head,ploylist *pre)//多項(xiàng)式相減

          ploylist *mul(ploylist *head,ploylist *pre)//多項(xiàng)式相乘

          ploylist *der(ploylist *head)//多項(xiàng)式求導(dǎo)

          void print(ploylist *fun)//輸出多項(xiàng)式,fun指要輸出的多項(xiàng)式鏈表的表頭 void start()//用戶(hù)選擇界面

          三、詳細(xì)設(shè)計(jì):

          #include

          #include

          typedef struct node

          //定義節(jié)點(diǎn)類(lèi)型 { float coef;

          //多項(xiàng)式的系數(shù)

          int expn;

          //多項(xiàng)式的指數(shù)

          struct node * next;//結(jié)點(diǎn)指針域 }ploylist;void insert(ploylist *head,ploylist *input)

          //查找位置插入新鏈節(jié)的函數(shù),且讓輸入的多項(xiàng)式呈降序排列 {

          ploylist *pre,*now;

          int signal=0;

          pre=head;

          第10頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          next=input;} //如果只有一個(gè)頭結(jié)點(diǎn),則把新結(jié)點(diǎn)直接連在后面

          else {

          next;//如果不是只有一個(gè)頭結(jié)點(diǎn),則設(shè)置now指針

          while(signal==0)

          {expn< now->expn)

          {next==null)

          {next=input;

          signal=1;

          }else

          {pre=now;

          next;//始終讓新輸入的數(shù)的指數(shù)與最后一個(gè)結(jié)點(diǎn)中的數(shù)的指數(shù)比較,小于則插在其后面

          }}

          expn)

          {next=now;

          next=input;

          signal=1;

          }//若新結(jié)點(diǎn)中指數(shù)比最后一個(gè)結(jié)點(diǎn)即now中的指數(shù)大,則插入now之前

          else//若指數(shù)相等則需合并為一個(gè)結(jié)點(diǎn),若相加后指數(shù)為0則釋放該結(jié)點(diǎn)

          {coef;

          signal=1;

          free(input);

          coef==0)

          {next;

          free(now);

          }}//else } //while

          第11頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          }//else }//void

          ploylist *creat(char ch)

          //輸入多項(xiàng)式 {

          ploylist *head,*input;

          float x;

          int y;

          head=(ploylist *)malloc(sizeof(ploylist));

          //創(chuàng)建鏈表頭

          next=null;

          scanf(“%f %d”,&x,&y);//實(shí)現(xiàn)用戶(hù)輸入的第一個(gè)項(xiàng),包括其指數(shù)和系數(shù)

          while(x!=0)

          {input=(ploylist *)malloc(sizeof(ploylist));//創(chuàng)建新鏈節(jié)

          coef=x;

          expn=y;

          next=null;

          insert(head,input);//每輸入一項(xiàng)就將其排序,是的鏈表中多項(xiàng)式呈降序排列

          scanf(“%f %d”,&x,&y);

          } return head;}

          ploylist *add(ploylist *head,ploylist *pre)

          //多項(xiàng)式相加,head為第一個(gè)多項(xiàng)式建立的鏈表表頭,pre為第二個(gè)多項(xiàng)式建立的鏈表表頭 {

          ploylist *input;

          int flag=0;

          while(flag==0)

          {next==null)

          flag=1;//若該鏈表為空,則無(wú)需進(jìn)行加法運(yùn)算,跳出循環(huán)

          else

          {next;

          input=(ploylist *)malloc(sizeof(ploylist));

          第12頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          coef;

          expn;

          next=null;

          insert(head,input);// 把g(x)插入到f(x)中,相當(dāng)于兩者相加,結(jié)果保存于f(x)

          }} return head;}

          ploylist *sub(ploylist *head,ploylist *pre)//多項(xiàng)式相減 {

          ploylist *input;

          int flag=0;

          while(flag==0)

          {next==null)

          flag=1;

          else

          {next;

          input=(ploylist *)malloc(sizeof(ploylist));

          coef;//將第二個(gè)多項(xiàng)式里的數(shù)變?yōu)槠湎喾磾?shù),再用和加法一樣的方法實(shí)現(xiàn)減法

          expn;

          next=null;

          insert(head,input);

          }} return head;}

          ploylist *mul(ploylist *head,ploylist *pre)//多項(xiàng)式項(xiàng)乘 { ploylist *hf,*pf,*qa,*qb;

          next;

          next;//定義指針指向表頭后一個(gè)元素,即鏈表中第一個(gè)元素

          hf =(ploylist *)malloc(sizeof(ploylist));//新創(chuàng)建一個(gè)結(jié)點(diǎn),當(dāng)做表頭

          next)

          第13頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          { next)//用兩個(gè)循環(huán),實(shí)現(xiàn)兩個(gè)多項(xiàng)式之間每個(gè)項(xiàng)相乘,結(jié)果用insert函數(shù)進(jìn)行排序與合并

          {pf =(ploylist *)malloc(sizeof(ploylist));

          coef;//系數(shù)相乘

          expn;//指數(shù)相加

          next = null;

          insert(hf,pf);

          } } return hf;}

          next;while(p){

          expn;

          expn--;

          next;} return head;}//將多項(xiàng)式的每項(xiàng)系數(shù)和指數(shù)相乘得到新的系數(shù),指數(shù)減一得到新的指數(shù)即完成求導(dǎo)

          void print(ploylist *fun)//輸出多項(xiàng)式,fun指要輸出的多項(xiàng)式鏈表的表頭 {

          ploylist *printing;

          int flag=0;

          next;

          next==null)//若為空表,則無(wú)需輸出

          {printf(“0n”);

          return;

          }while(flag==0)

          {第14頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          next!=printing)

          printf(“+”);

          coef==1);

          coef==-1)

          printf(“-”);

          else

          coef);

          expn);

          coef==-1))

          printf(“1”);

          next==null)

          flag=1;

          else

          next;

          } printf(“n”);}

          void start()//用戶(hù)選擇界面 { printf(“

          #n”);

          printf(“

          用戶(hù)選擇界面

          n”);

          printf(“ ************************************n”);

          printf(“ *

          *n”);

          printf(“ *

          1.兩個(gè)一元多項(xiàng)式相加

          *n”);

          printf(“ *

          2.兩個(gè)一元多項(xiàng)式相減

          *n”);

          printf(“ *

          3.兩個(gè)一元多項(xiàng)式相乘

          *n”);

          printf(“ *

          4.對(duì)一個(gè)一個(gè)一元多項(xiàng)式求導(dǎo) *n”);

          printf(“ *

          0.退出系統(tǒng)

          *n”);

          printf(“ *

          *n”);

          printf(“ ************************************n”);

          printf(“

          n”);

          printf(“ 注釋?zhuān)狠斎攵囗?xiàng)式格式(可無(wú)序):系數(shù)1 指數(shù)1 系數(shù)2 指數(shù)2 ,并以0 0 結(jié)束:n”);

          printf(“

          n”);

          printf(“ 請(qǐng)選擇操作: ”);}

          int main(){ ploylist *f,*g,*pf,*hf,*p;

          第15頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          int sign=-1;

          start();

          while(sign!=0)

          {scanf(“%d”,&sign);

          switch(sign)

          {case 0:

          break;

          case 1://多項(xiàng)式相加

          {printf(“ 你選擇的操作是多項(xiàng)式相加:n”);

          printf(“ 請(qǐng)輸入第一個(gè)多項(xiàng)式f(x):”);

          f=creat('f');

          printf(“ 第一個(gè)多項(xiàng)式為:f(x)=”);

          print(f);

          printf(“ 請(qǐng)輸入第二個(gè)多項(xiàng)式g(x):”);

          g=creat('g');

          printf(“ 第二個(gè)多項(xiàng)式為:g(x)=”);

          print(g);

          printf(“ 結(jié)果為:f(x)=f(x)+g(x)=”);

          f=add(f,g);

          print(f);

          printf(“nn”);

          printf(“ 繼續(xù)請(qǐng)選擇相應(yīng)操作,;

          }case 2://多項(xiàng)式相減

          {printf(” 你選擇的操作是多項(xiàng)式相減:n“);

          printf(” 請(qǐng)輸入第一個(gè)多項(xiàng)式f(x):“);

          f=creat('f');

          printf(” 第一個(gè)多項(xiàng)式為:f(x)=“);

          print(f);

          printf(” 請(qǐng)輸入第二個(gè)多項(xiàng)式g(x):“);

          g=creat('g');

          printf(” 第二個(gè)多項(xiàng)式為:g(x)=“);

          print(g);

          printf(” 結(jié)果為:f(x)=f(x)-g(x)=“);

          f=sub(f,g);

          print(f);

          ”);第16頁(yè)

          山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          printf(“nn”);

          printf(“ 繼續(xù)請(qǐng)選擇相應(yīng)操作,退出請(qǐng)按0.”);

          break;

          }case 3://多項(xiàng)式相乘

          {printf(“ 你選擇的操作是多項(xiàng)式相乘:n”);

          printf(“ 請(qǐng)輸入第一個(gè)多項(xiàng)式f(x):”);

          f=creat('f');

          printf(“ 第一個(gè)多項(xiàng)式為:f(x)=”);

          print(f);

          printf(“ 請(qǐng)輸入第二個(gè)多項(xiàng)式g(x):”);

          g=creat('g');

          printf(“ 第二個(gè)多項(xiàng)式為:g(x)=”);

          print(g);

          printf(“ 結(jié)果為:f(x)=f(x)* g(x)=”);

          pf=mul(f,g);

          print(pf);

          printf(“nn”);

          printf(“ 繼續(xù)請(qǐng)選擇相應(yīng)操作,退出請(qǐng)按0.”);

          break;

          }case 4://多項(xiàng)式求導(dǎo)

          {printf(“您選擇的是對(duì)一個(gè)一元多項(xiàng)式求導(dǎo):n”);

          printf(“請(qǐng)輸入一個(gè)一元多項(xiàng)式:”);

          f = creat('f');

          printf(“這個(gè)多項(xiàng)式為:f(x)= ”);

          print(f);

          printf(“求導(dǎo)結(jié)果為:f(x)=f'(x)= ”);

          f=der(f);

          print(f);

          printf(“nn”);

          printf(“ 繼續(xù)請(qǐng)選擇相應(yīng)操作,退出請(qǐng)按0.”);

          break;

          }}//swith

          }//while }//void

          四、測(cè)試結(jié)果:

          第17頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)

          第18頁(yè)

          數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目篇三

          數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)

          計(jì)算機(jī)科學(xué)與技術(shù)2008級(jí)1班

          課程設(shè)計(jì)題目:圖書(shū)借閱管理系統(tǒng)

          姓名:

          學(xué)號(hào):

          一.需求分析說(shuō)明

          圖書(shū)借閱處理過(guò)程簡(jiǎn)述處理過(guò)程主要包含:新增圖書(shū)上架、辦理圖證、圖書(shū)查詢(xún)、借書(shū)、還書(shū)等。

          (1)新增圖書(shū)上架新書(shū)上架時(shí),需要登記新書(shū)的:書(shū)名、作者、出版社、總冊(cè)數(shù)的信息。

          (2)辦理圖書(shū)借閱證讀者辦理借書(shū)證時(shí),需要登記讀者(學(xué)生)的學(xué)號(hào)、姓名。(3)圖書(shū)查詢(xún)讀者按照?qǐng)D書(shū)編號(hào)查詢(xún)圖書(shū)基本信息,并可以得知現(xiàn)還有幾冊(cè)可以借閱。

          (4)借書(shū)每個(gè)學(xué)生讀者最多借5本書(shū)。讀者借書(shū)時(shí),應(yīng)登記書(shū)號(hào)、借書(shū)日期(年月日)。

          2.?dāng)?shù)據(jù)分析數(shù)據(jù)處理過(guò)程中涉及到兩個(gè)實(shí)體:圖書(shū)和會(huì)員;各實(shí)體應(yīng)具有的屬性如下:圖書(shū)(書(shū)號(hào)、書(shū)名、作者,總冊(cè)數(shù))讀者(學(xué)號(hào)、姓名、班級(jí))由于同一種圖書(shū)可以有多冊(cè)上架,每個(gè)讀者最多可以借閱5本書(shū),圖書(shū)借閱的屬性如下:借閱(書(shū)號(hào)、借書(shū)日期)3.功能分析系統(tǒng)功能模塊包括:圖書(shū)增加、圖書(shū)刪除、圖書(shū)查詢(xún)、借書(shū)、還書(shū);另外還包括圖書(shū)信息修改和讀者信息修改。

          二.基本功能

          1)圖書(shū)管理(增加圖書(shū)、查詢(xún)圖書(shū)、刪除圖書(shū)、圖書(shū)借閱、還書(shū)); 2)會(huì)員管理(增加會(huì)員、查詢(xún)會(huì)員、刪除會(huì)員、借書(shū)信息); 3)系統(tǒng)管理(初始化、載入數(shù)據(jù)、保存數(shù)據(jù)、退出程序);

          三.程序設(shè)計(jì)

          #include

          #include

          #include#define null 0

          typedef struct bookinfo{ /////圖書(shū)結(jié)構(gòu)

          int b_code;////圖書(shū)編號(hào)

          char b_name[20];/////名稱(chēng)

          int b_total;/////總數(shù)

          int b_out;///借出數(shù) bookinfo* nextbook;//////下一類(lèi)圖書(shū)

          }bookinfo;

          typedef struct memberinfo{ ///會(huì)員結(jié)構(gòu)

          long m_code;/////會(huì)員編號(hào)

          char m_name[20];////會(huì)員名字

          int l_codes[6];/////以借書(shū)的編號(hào),最多5

          memberinfo* nextmember;////下一會(huì)員

          }memberinfo;

          typedef struct system{ ///管理系統(tǒng)結(jié)構(gòu)

          bookinfo* bi;

          memberinfo* mi;

          int booktotal;////圖書(shū)類(lèi)庫(kù)存量

          int membertota;/////會(huì)員數(shù)量

          }system;

          system* initsystem();/////

          void addbook(system*);////增加圖書(shū) bookinfo* searchbook(system*,int);////查詢(xún)圖書(shū)信息

          void delbook(system*);/////刪除圖書(shū)

          void brrowbook(system*);///////借書(shū)處理

          void turnbackbook(system*);////還書(shū)處理

          void addmember(system*);/////添加會(huì)員

          void delmember(system*);////刪除會(huì)員

          memberinfo* searchmember(system*,int);/////查詢(xún)會(huì)員信息

          void storedata(system*);

          void loaddata(system*);

          void exitsystem();

          void main(){ system* s=initsystem();

          int sel;do{

          cout<<“ntttt圖書(shū)管理系統(tǒng)”<

          cout<<“ttt******************************”<

          cout<<“ttt******************************”<

          cout<<“ttt 1.增加圖書(shū).t 3.刪除圖書(shū).t 6.添加會(huì)員.t 8.查詢(xún)會(huì)員.t 10.保存數(shù)據(jù).t11.退出程序.n”;

          cout<<“ttt******************************”<

          cout<<“ttt******************************”<

          cout<<“請(qǐng)選擇:”;

          do{

          sel;

          =1&&sel<=11)break;

          cout<<“選擇錯(cuò)誤!n重新輸入:”<

          }while(1);

          switch(sel){

          case 1:addbook(s);break;

          case 2:searchbook(s,-1);break;

          case 3:delbook(s);break;

          case 4:brrowbook(s);;break;

          case 5:turnbackbook(s);break;case 6:addmember(s);break;

          case 7:delmember(s);break;

          case 8:searchmember(s,-1);break;

          case 9:loaddata(s);break;

          case 10:storedata(s);break;

          default:exitsystem();}

          }while(1);}

          system* initsystem(){

          system* s=(system*)malloc(sizeof(system));

          bi=(bookinfo*)malloc(sizeof(bookinfo));

          booktotal=0;

          nextbook=null;

          mi=(memberinfo*)malloc(sizeof(memberinfo));

          membertota=0;

          nextmember=null;

          return s;}

          void addbook(system* s){ int tempcode;

          char sel;

          bi;

          bookinfo* t;

          bookinfo* m;

          int num;do{

          cout<<“輸入圖書(shū)編號(hào):”;

          tempcode;

          if(m=searchbook(s,tempcode)){

          cout<<“這類(lèi)書(shū)以有庫(kù)存.n輸入圖書(shū)的入庫(kù)量:”<

          num;

          b_total+=num;}

          else{

          t=(bookinfo*)malloc(sizeof(bookinfo));

          b_code=tempcode;

          cout<<“輸入圖書(shū)的名稱(chēng):”;

          b_name;

          cout<<“輸入圖書(shū)的入庫(kù)量:”;

          b_total;

          nextbook;

          nextbook=t;

          booktotal++;}

          cout<<“添加完畢!”<

          cout<<“還要添加嗎?(y/n)”;

          sel;

          if(sel=='n'||sel=='n'){

          cout<<“結(jié)束添加”<

          return;}

          }while(1);}

          bookinfo* searchbook(system* s,int code){

          nextbook;

          int bookcode;

          if(code==-1){

          cout<<“請(qǐng)輸入要查詢(xún)的圖書(shū)編號(hào):”;

          bookcode;}

          else bookcode=code;

          nextbook;if(code==-1){

          if(!bi)cout<<“沒(méi)找到你所要的圖書(shū).”<

          else {

          cout<<“圖書(shū)編號(hào)為:”<

          b_code<

          cout<<“圖書(shū)名稱(chēng)為:”<

          b_name<

          cout<<“圖書(shū)庫(kù)存量為:”<

          b_total<

          cout<<“圖書(shū)借出量為:”<

          b_out<

          return bi;}

          void delbook(system* s){

          bookinfo* bi;

          bi;

          memberinfo* memi;

          char sel;

          int tempcode;

          int i;do{

          nextbook;

          nextmember;

          cout<<“請(qǐng)輸入要?jiǎng)h除的圖書(shū)的編號(hào):”;

          tempcode;

          while(bi){

          b_code==tempcode)break;

          pl=bi;

          nextbook;}

          if(bi==0)cout<<“沒(méi)有找到要?jiǎng)h除的圖書(shū)”<

          else{

          nextbook;

          booktotal--;

          while(memi){

          for(i=1;i<=memi->l_codes[0];i++){

          l_codes[i]==tempcode)break;

          }if(i<=memi->l_codes[0]){

          for(;i

          l_codes[0]--;

          }

          nextmember;}

          free(bi);}

          cout<<“還有圖書(shū)要?jiǎng)h除嗎?(y/n)”;

          sel;

          if(sel=='n'||sel=='n'){

          cout<<“刪除圖書(shū)結(jié)束”<

          return;}

          }while(1);}

          void brrowbook(system* s){

          nextbook;

          bookinfo* p;

          char sel;

          int memcode;

          memberinfo* mp;

          int tempcode;do{

          cout<<“輸入要借出的書(shū)號(hào):”;

          tempcode;

          p=searchbook(s,tempcode);

          if(!p){

          cout<<“沒(méi)有找到要借出的圖書(shū).”<

          else{

          cout<<“此書(shū)的現(xiàn)存量為”<<(p->b_total-p->b_out)<

          b_out))cout<<“沒(méi)有足夠的書(shū)了,外借失敗.”<

          else{

          cout<<“請(qǐng)輸入會(huì)員編號(hào):”;

          memcode;

          mp=searchmember(s,memcode);

          if(!mp)cout<<“會(huì)員編號(hào)輸入錯(cuò)誤,外借失敗”<

          else{

          l_codes[0]==5)cout<<“借書(shū)量不能超過(guò)5本”;

          else{

          b_out++;

          l_codes[0]]=tempcode;

          cout<<“外借成功.”<

          } } } }

          cout<<“n還有圖書(shū)要借出嗎?(y/n)”;

          sel;

          if(sel=='n'||sel=='n'){

          cout<<“外借操作結(jié)束.”<

          return;}

          }while(1);}

          void turnbackbook(system* s){

          nextbook;

          bookinfo* p;

          memberinfo* mp;

          int membercode;

          int tempcode;

          int i;

          char sel;do{

          cout<<“輸入歸還書(shū)號(hào):”;cin>>tempcode;

          p=searchbook(s,tempcode);

          if(!p){

          cout<<“書(shū)號(hào)輸入錯(cuò)誤.”<

          else{

          cout<<“此書(shū)的現(xiàn)存量為”<<(p->b_total-p->b_out)<

          cout<<“請(qǐng)輸入會(huì)員編號(hào):”;

          membercode;

          if(!(mp=searchmember(s,membercode)))cout<<“會(huì)員編號(hào)輸入錯(cuò)誤,歸還失敗”<

          else{

          b_out--;

          for(i=1;i<=mp->l_codes[0];i++){

          l_codes[i]==tempcode)break;

          }while(i

          l_codes[0]){

          mp->l_codes[i]=mp->l_codes[i+1];

          i++;

          }l_codes[0]--;

          cout<<“歸還成功.”<

          cout<<“還有要?dú)w還的圖書(shū)嗎?(y/n)”;

          sel;

          if(sel=='n'||sel=='n'){

          cout<<“歸還結(jié)束.”<

          return;}

          }while(1);}

          void addmember(system* s){

          int tempcode;

          char sel;

          mi;

          memberinfo* t;do{

          cout<<“輸入會(huì)員編號(hào):”;

          tempcode;

          t=(memberinfo*)malloc(sizeof(memberinfo));

          m_code=tempcode;

          cout<<“輸入會(huì)員姓名:”;

          m_name;

          l_codes[0]=0;

          nextmember;

          nextmember=t;

          membertota++;

          cout<<“添加完畢!”<

          cout<<“還要添加嗎?(y/n)”;

          sel;

          if(sel=='n'||sel=='n'){

          cout<<“結(jié)束添加”<

          return;}

          }while(1);}

          memberinfo* searchmember(system* s,int code){

          nextmember;

          int membercode;

          int i;

          if(code==-1){

          cout<<“請(qǐng)輸入要查詢(xún)的會(huì)員編號(hào):”;

          membercode;}

          else membercode=code;

          nextmember;

          if(code==-1){

          if(!bi)cout<<“沒(méi)找到指定會(huì)員.”<

          else {

          cout<<“會(huì)員編號(hào)為:”<

          m_code<

          cout<<“名稱(chēng)為:”<

          m_name<

          cout<<“已借的圖書(shū)有:”<

          l_codes[0]<<“本.”<

          for(i=1;i<=bi->l_codes[0];i++)

          cout<

          l_codes[i]<<' ';

          cout<

          return bi;}

          void delmember(system* s){

          memberinfo* bi;

          memberinfo* pl;

          bookinfo* book;

          char sel;

          int i;

          int tempcode;do{

          nextmember;

          mi;

          cout<<“請(qǐng)輸入要?jiǎng)h除的會(huì)員的編號(hào):”;

          tempcode;

          while(bi){

          m_code==tempcode)break;

          pl=bi;

          nextmember;}

          if(!bi)cout<<“沒(méi)有找到要?jiǎng)h除的會(huì)員編號(hào).”;

          else{

          nextmember;

          membertota--;

          for(i=1;i<=bi->l_codes[0];i++){

          l_codes[i]))){

          cout<<“刪除會(huì)員出錯(cuò)!”<

          }else{

          b_out--;

          b_total--;

          } }

          free(bi);}

          cout<<“還有會(huì)員要?jiǎng)h除嗎?(y/n)”;

          sel;

          if(sel=='n'||sel=='n'){

          cout<<“刪除會(huì)員結(jié)束”<

          return;}

          }while(1);}

          void storedata(system* s){

          file* fp;

          nextbook;

          if(!(fp=fopen(“booksys”,“wb”))){

          cout<<“打開(kāi)文件booksys失敗!”<

          exit(0);}

          booktotal),sizeof(int),1,fp);

          while(bi){

          fwrite(bi,sizeof(bookinfo),1,fp);

          nextbook;}

          nextmember;

          membertota),sizeof(int),1,fp);

          while(mi){

          fwrite(mi,sizeof(memberinfo),1,fp);

          nextmember;}

          fclose(fp);}

          void loaddata(system* s){

          file* fp;

          if(!(fp=fopen(“booksys”,“rb”))){

          cout<<“打開(kāi)文件booksys失敗”<

          exit(0);}

          bi;

          bookinfo* tempbi;

          booktotal),sizeof(int),1,fp);

          for(int i=1;i<=s->booktotal;i++){

          tempbi=(bookinfo*)malloc(sizeof(bookinfo));

          fread(tempbi,sizeof(bookinfo),1,fp);

          nextbook=tempbi;

          bi=tempbi;}

          nextbook=null;

          mi;

          memberinfo* tempmi;

          membertota),sizeof(int),1,fp);

          for(i=1;i<=s->membertota;i++){

          tempmi=(memberinfo*)malloc(sizeof(memberinfo));

          fread(tempmi,sizeof(memberinfo),1,fp);

          nextmember=tempmi;

          nextmember=null;

          fclose(fp);}

          void exitsystem(){

          char select;

          cout<<“警告: 程序結(jié)束后未存儲(chǔ)的數(shù)據(jù)將消失.”<

          cout<<“確定要退出嗎?(y/n)”;

          select;

          if(select=='y'||select=='y')exit(0);

          if(select=='n'||select=='n')return;}

          四.心得體會(huì)

          歷經(jīng)大半個(gè)學(xué)期的努力,我的圖書(shū)管理系統(tǒng)終于如期完成了。此次做系統(tǒng)給我最大的感觸有兩個(gè)。

          第一個(gè)就是有了一個(gè)利用本專(zhuān)業(yè)所學(xué)到的知識(shí),來(lái)練習(xí),實(shí)踐的機(jī)會(huì)。

          第二個(gè)就是增強(qiáng)了自己的自信心。通過(guò)進(jìn)行圖書(shū)借閱管理系統(tǒng)的設(shè)計(jì),進(jìn)一步明確了研制一個(gè)管理信息系統(tǒng)的方法和思路,將系統(tǒng)開(kāi)發(fā)的各階段的基本活動(dòng)貫穿起來(lái),使我更加形象、具體的了解了管理信息系統(tǒng)。系統(tǒng)開(kāi)發(fā)的過(guò)程是一個(gè)鞏固以前所學(xué)的計(jì)算機(jī)知識(shí),掌握新技能的過(guò)程。我從這一階段工作中收益非淺,通過(guò)前段時(shí)間的課程設(shè)計(jì),我能夠融會(huì)貫通所學(xué)的專(zhuān)業(yè)基礎(chǔ)知識(shí)和專(zhuān)業(yè)理論知識(shí),培養(yǎng)我們綜合運(yùn)用專(zhuān)業(yè)知識(shí)分析問(wèn)題、解決問(wèn)題的能力及運(yùn)用工具軟件的能力。不僅弄清了以前對(duì)系統(tǒng)開(kāi)發(fā)的一些模糊的認(rèn)識(shí),而且提高了寫(xiě)代碼的水平,培養(yǎng)了嚴(yán)謹(jǐn)?shù)墓ぷ髯黠L(fēng),為今后在工作崗位上用好管好計(jì)算機(jī)打下了堅(jiān)實(shí)的基礎(chǔ)。

          在做系統(tǒng)的過(guò)程中,我遇到的最大的困難是調(diào)程序方面的。在運(yùn)行程序的過(guò)程中經(jīng)常會(huì)出現(xiàn)程序自行中斷,需要進(jìn)行調(diào)試的信息。這些信息使得我不得不反復(fù)看書(shū),琢磨程序。在一遍一遍的調(diào)試之下,程序終于被調(diào)通了。那時(shí),我終于可以上上的舒一口氣了。

          我的系統(tǒng)規(guī)模比較小同時(shí)由于我的時(shí)間和能力等多方面的因素影響,我們的系統(tǒng)也存在一定的缺陷。

          數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目篇四

          課程設(shè)計(jì)題目

          1、運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)

          任務(wù):參加運(yùn)動(dòng)會(huì)有n個(gè)學(xué)校,學(xué)校編號(hào)為1……n。比賽分成m個(gè)男子項(xiàng)目,和w個(gè)女子項(xiàng)目。項(xiàng)目編號(hào)為男子1……m,女子m+1……m+w。不同的項(xiàng)目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學(xué)生自己設(shè)定。(m=10 , w=8 , n=15)功能要求:

          1).可以輸入各個(gè)項(xiàng)目的前三名或前五名的成績(jī); 2).能統(tǒng)計(jì)各學(xué)校總分(用鏈表);

          3).可以按學(xué)校編號(hào)、學(xué)??偡?、男女團(tuán)體總分排序輸出(快速、基數(shù));

          4).可按學(xué)校編號(hào)查詢(xún)學(xué)校某個(gè)項(xiàng)目的情況;可按項(xiàng)目編號(hào)查詢(xún)?nèi)〉们叭蚯拔迕膶W(xué)校。

          界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。

          存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì),但是要求運(yùn)動(dòng)會(huì)的相關(guān)數(shù)據(jù)要存儲(chǔ)在數(shù)據(jù)文件中。

          測(cè)試數(shù)據(jù):要求使用

          1、全部合法數(shù)據(jù);

          2、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試,以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫(xiě)明;

          2、迷宮求解

          任務(wù):可以讀入一個(gè)任意大小的迷宮數(shù)據(jù),分別用廣度和深度搜索的方法求出一條走出迷宮的路徑,并將路徑輸出(最佳路徑); 要求:以較為直觀的方式顯示結(jié)果

          3、huffman編碼

          任務(wù) :對(duì)一篇英文文章,統(tǒng)計(jì)各字符出現(xiàn)的次數(shù),實(shí)現(xiàn)huffman編碼; 要求:輸出每個(gè)字符出現(xiàn)的次數(shù)和編碼,其中求最小權(quán)值要求用堆實(shí)現(xiàn);

          4、營(yíng)業(yè)窗口隊(duì)列模擬

          任務(wù):實(shí)現(xiàn)具有n(n=3)個(gè)窗口的現(xiàn)實(shí)隊(duì)列模擬,統(tǒng)計(jì)每人的等待時(shí)間。要求:

          1).隨機(jī)產(chǎn)生顧客的到達(dá)時(shí)間和服務(wù)時(shí)間存盤(pán)。2).利用存盤(pán)數(shù)據(jù)實(shí)現(xiàn)隊(duì)列的插入和刪除。2).當(dāng)有顧客離開(kāi)時(shí),根據(jù)隊(duì)列長(zhǎng)度調(diào)整隊(duì)尾。3).考慮顧客中途離隊(duì)的情況。4).考慮顧客具有優(yōu)先級(jí)的情況。

          5、公交線(xiàn)路提示

          任務(wù):建立南京主要公交線(xiàn)路圖。要求:輸入任意兩站點(diǎn),給出最佳的乘車(chē)線(xiàn)路和轉(zhuǎn)車(chē)地點(diǎn)。

          6、家譜管理系統(tǒng)

          任務(wù):實(shí)現(xiàn)具有下列功能的家譜管理系統(tǒng) 功能要求:

          1).輸入文件以存放最初家譜中各成員的信息,成員的信息中均應(yīng)包含以下內(nèi)容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。

          2).實(shí)現(xiàn)數(shù)據(jù)的存盤(pán)和讀盤(pán)。3).以圖形方式顯示家譜。

          4).顯示第n 代所有人的信息。

          5).按照姓名查詢(xún),輸出成員信息(包括其本人、父親、孩子的信息)。6).按照出生日期查詢(xún)成員名單。7).輸入兩人姓名,確定其關(guān)系。8).某成員添加孩子。

          9).刪除某成員(若其還有后代,則一并刪除)。10).修改某成員信息。

          11).按出生日期對(duì)家譜中所有人排序。

          12).打開(kāi)一家譜時(shí),提示當(dāng)天生日的健在成員。

          要求:建立至少30個(gè)成員的數(shù)據(jù),以較為直觀的方式顯示結(jié)果,并提供文稿形式以便檢查。

          界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。

          存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì),但是要求相關(guān)數(shù)據(jù)要存儲(chǔ)在數(shù)據(jù)文件中。測(cè)試數(shù)據(jù):要求使用

          1、全部合法數(shù)據(jù);

          2、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試,以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫(xiě)明;

          7、排序算法比較

          設(shè)計(jì)要求:利用隨機(jī)函數(shù)產(chǎn)生10個(gè)樣本,每個(gè)樣本有50000隨機(jī)整數(shù),利用直接插入排序、折半插入排序,表插入排序,希爾排序,起泡排序、快速排序、選擇排序、堆排序,歸并排序,基數(shù)排序十種排序方法進(jìn)行排序(結(jié)果為由小到大的順序),并統(tǒng)計(jì)每一種排序所耗費(fèi)的平均時(shí)間(統(tǒng)計(jì)為圖表坐標(biāo)形式)。

          8、算術(shù)表達(dá)式求值 [問(wèn)題描述]

          一個(gè)算術(shù)表達(dá)式是由操作數(shù)(operand)、運(yùn)算符(operator)和界限符(delimiter)組成的。假設(shè)操作數(shù)是正整數(shù),運(yùn)算符只含加減乘除等四種運(yùn)算符,界限符有左右括號(hào)和表達(dá)式起始、結(jié)束符“#”,如:#(7+15)*(23-28/4)#。引入表達(dá)式起始、結(jié)束符是為了方便。編程利用“算符優(yōu)先法”求算術(shù)表達(dá)式的值。[基本要求](1)從鍵盤(pán)讀入一個(gè)合法的算術(shù)表達(dá)式,輸出正確的結(jié)果。(2)顯示輸入序列和棧的變化過(guò)程。

          9、電子小字典

          基本要求:建立一個(gè)微型電子字典,實(shí)現(xiàn)生詞的加入,單詞的查找、刪除,修改等操作。

          數(shù)據(jù)結(jié)構(gòu):鍵樹(shù)

          10、校園導(dǎo)游程序

          [問(wèn)題描述]用無(wú)向網(wǎng)表示你所在學(xué)校的校園景點(diǎn)平面圖,圖中頂點(diǎn)表示主要景點(diǎn),存放景點(diǎn)的編號(hào)、名稱(chēng)、簡(jiǎn)介等信息,圖中的邊表示景點(diǎn)間的道路,存放路徑長(zhǎng)度等信息。要求能夠回答有關(guān)景點(diǎn)介紹、游覽路徑等問(wèn)題。[基本要求](1)查詢(xún)各景點(diǎn)的相關(guān)信息;

          (2)查詢(xún)圖中任意兩個(gè)景點(diǎn)間的最短路徑。(3)查詢(xún)圖中任意兩個(gè)景點(diǎn)間的所有路徑。

          (4)增加、刪除、更新有關(guān)景點(diǎn)和道路的信息。

          11、稀疏矩陣相乘

          任務(wù):以三元組形式存儲(chǔ)稀疏矩陣,實(shí)現(xiàn)矩陣相乘。

          12、平衡二叉樹(shù)

          任務(wù):平衡二叉樹(shù)的建立、結(jié)點(diǎn)的插入和刪除。

          13、b-樹(shù)

          任務(wù):3階b-樹(shù)的結(jié)點(diǎn)的插入和刪除。

          14、hash表

          任務(wù):以班級(jí)學(xué)生姓名(拼音)為關(guān)鍵字,建立hash涵數(shù),實(shí)現(xiàn)hash表存儲(chǔ),用鏈地址方法解決沖突。

          15、(自選合適的題目)

          成績(jī)?cè)u(píng)定細(xì)則:

          1.正確性:程序是否可以運(yùn)行,結(jié)果是否正確(20分)2.功能的完備性:是否實(shí)現(xiàn)要求的所有子功能(20分)

          3.課程設(shè)計(jì)報(bào)告中的算法說(shuō)明的清晰程度,課程設(shè)計(jì)報(bào)告中總結(jié)的深刻程度(20分)4.獨(dú)立完成情況(40分)總計(jì):100分

          加分項(xiàng)目:

          1.健壯性:異常處理的情況

          2.可讀性:代碼編寫(xiě)是否規(guī)范,是否便于閱讀。如函數(shù)、變量命名,‘{ }’的縮進(jìn),關(guān)鍵位置適量注釋等

          3.功能的完善:除要求實(shí)現(xiàn)的功能外,完成了其它的功能,實(shí)現(xiàn)了功能的完善 4.界面的設(shè)計(jì):可視化界面,或者交互良好的dos界面 5.……(自薦加分項(xiàng)目)

          =1000行。

          代碼總量 = 課設(shè)題目1 代碼量 + 課設(shè)題目2 代碼量…… 若代碼總量低于1000行,則成績(jī)按比例打折。

          編程語(yǔ)言:c或c++語(yǔ)言

          編程環(huán)境:microsoft visual c++ 6.0

          檢查方式: 1.總體上檢查程序的代碼量,正確性,可讀性,健壯性,功能的完備性,代碼量,程序的結(jié)構(gòu)是否合理;局部檢查三個(gè)以上函數(shù)塊 2.檢查程序時(shí)同時(shí)檢查課程設(shè)計(jì)報(bào)告的電子文檔

          時(shí)間安排: 上機(jī)時(shí)間安排 課程設(shè)計(jì)報(bào)告上交時(shí)間 3 課程設(shè)計(jì)檢查時(shí)間

          課程設(shè)計(jì)報(bào)告要求:

          1.所有的課程設(shè)計(jì)報(bào)告,均要有封面,包括:課題名稱(chēng)、班級(jí)、學(xué)號(hào)、學(xué)生姓名、成績(jī)和指導(dǎo)教師;

          2.給出自己采用的數(shù)據(jù)結(jié)構(gòu); 3.給出算法設(shè)計(jì)思想;

          4.給出實(shí)現(xiàn)的源程序,并在必要的代碼處給出注釋?zhuān)?5.給出測(cè)試數(shù)據(jù)和結(jié)果;

          6.給出算法的時(shí)間復(fù)雜度、另外可以提出算法的改進(jìn)方法;

          7.給出結(jié)束語(yǔ):說(shuō)明完成課程設(shè)計(jì)的情況,心得體會(huì);課程設(shè)計(jì)報(bào)告的電子文檔在上機(jī)檢查程序時(shí)一并檢查;書(shū)面文檔在指定的時(shí)間內(nèi)上交。

          數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目篇五

          數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)

          1.赫夫曼編碼器

          設(shè)計(jì)一個(gè)利用赫夫曼算法的編碼和譯碼系統(tǒng),重復(fù)地顯示并處理以下項(xiàng)目,直到選擇退出為止。要求:

          1)將權(quán)值數(shù)據(jù)存放在數(shù)據(jù)文件(文件名為,位于執(zhí)行程序的當(dāng)前目錄中)

          2)初始化:鍵盤(pán)輸入字符集大小26、26個(gè)字符和26個(gè)權(quán)值(統(tǒng)計(jì)一篇英文文章中26個(gè)字母),建立哈夫曼樹(shù);

          3)編碼:利用建好的哈夫曼樹(shù)生成哈夫曼編碼;

          4)輸出編碼(首先實(shí)現(xiàn)屏幕輸出,然后實(shí)現(xiàn)文件輸出); 5)界面優(yōu)化設(shè)計(jì)。

          代碼如下:

          #include

          #include

          #include

          #include

          #define n 200

          typedef struct htnode

          //結(jié)構(gòu)體 { int weight;

          char ch;int parent,lchild,rchild;}htnode;typedef char * * hcode;

          void save(int n,htnode *ht)

          //把權(quán)值保存到文件 {

          file * fp;

          int i;

          if((fp=fopen(“”,“wb”))==null)

          {printf(“cannot open filen”);

          return;

          }for(i=0;i

          if(fwrite(&ht[i].weight,sizeof(struct htnode),1,fp)!=1)

          printf(“file write errorn”);

          fclose(fp);

          system(“cls”);

          printf(“保存成功!”);

          }void create_h(int n,int m,htnode *ht)

          //建立赫夫曼樹(shù),進(jìn)行編碼 {

          int w,k,j;char c;for(k=1;k<=m;k++){

          if(k<=n)

          {printf(“n請(qǐng)輸入權(quán)值和字符(用空格隔開(kāi)): ”);

          scanf(“%d”,&w);

          scanf(“ %c”,&c);ht[k].ch=c;

          ht[k].weight=w;

          }else ht[k].weight=0;

          ht[k].parent=ht[k].lchild=ht[k].rchild=0;}

          int p1,p2,w1,w2;

          for(k=n+1;k<=m;k++){

          p1=0;p2=0;

          w1=32767;w2=32767;

          for(j=1;j<=k-1;j++)

          {if(ht[j].parent==0)

          {if(ht[j].weight

          {w2=w1;p2=p1;

          w1=ht[j].weight;

          p1=j;

          }else if(ht[j].weight

          {w2=ht[j].weight;

          p2=j;

          }}

          } ht[k].lchild=p1;ht[k].rchild=p2;ht[k].weight=ht[p1].weight+ht[p2].weight;

          ht[p1].parent=k;ht[p2].parent=k;

          } printf(“輸入成功!”);}

          void coding_h(int n,htnode *ht)

          //對(duì)結(jié)點(diǎn)進(jìn)行譯碼 { int k,sp,fp,p;char *cd;hcode hc;

          hc=(hcode)malloc((n+1)*sizeof(char *));

          cd=(char *)malloc(n*sizeof(char));cd[n-1]='';

          printf(“************************n”);printf(“char codingn”);

          for(k=1;k<=n;k++)

          {sp=n-1;p=k;fp=ht[k].parent;

          for(;fp!=0;p=fp,fp=ht[fp].parent)

          if(ht[fp].lchild==p)

          cd[--sp]='0';

          else

          cd[--sp]='1';

          hc[k]=(char *)malloc((n-sp)*sizeof(char));

          strcpy(hc[k],&cd[sp]);

          printf(“%c

          %sn”,ht[k].ch,hc[k]);

          }printf(“************************n”);free(cd);} void read(int n,htnode *ht)

          //從文件中讀出數(shù)據(jù) {

          int i;file * fp;if((fp=fopen(“”,“rb”))==null){

          printf(“cannot open filen”);

          exit(0);} for(i=0;i

          fread(&ht[i].weight,sizeof(struct htnode),1,fp);// printf(“%d n”,ht[i].weight);

          } coding_h(n,ht);

          fclose(fp);}

          void print_h(int m,htnode *ht)

          //輸出赫夫曼造樹(shù)過(guò)程 { int k;printf(“************************n”);printf(“num weight

          par lch rch n”);for(k=1;k<=m;k++){

          printf(“%d ”,k);

          printf(“

          %d”,ht[k].weight);

          printf(“

          %d”,ht[k].parent);

          printf(“

          %d”,ht[k].lchild);

          printf(“

          %dn”,ht[k].rchild);

          } printf(“************************n”);}

          void decode(int m,htnode *ht)

          //對(duì)輸入的電文進(jìn)行譯碼 { int i,j=0;char a[10];char endflag='2';i=m;printf(“輸入發(fā)送的編碼,以‘2’結(jié)束:”);scanf(“%s”,&a);printf(“譯碼后的字符:”);while(a[j]!='2'){

          if(a[j]=='0')

          i=ht[i].lchild;

          else i=ht[i].rchild;

          if(ht[i].lchild==0)

          //ht[i]是葉結(jié)點(diǎn)

          {printf(“%c”,ht[i].ch);

          i=m;

          //回到根結(jié)點(diǎn)

          }j++;} printf(“n”);if(ht[i].lchild!=0&&a[j]!='2')

          printf(“error”);}

          int main()

          //主函數(shù) { int n,m,c;htnode ht[n];do {

          system(“color 2f”);

          //(“nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt”);

          printf(“nttt 赫夫曼編譯碼系統(tǒng) ttt”);

          printf(“nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt”);

          printf(“nttt1.輸入權(quán)值、字母nttt2.把數(shù)據(jù)寫(xiě)入文件nttt3.輸出赫夫曼編碼表nttt”);

          printf(“6.從文件中讀出數(shù)據(jù)nttt7.退出”);

          printf(“nnttt請(qǐng)選擇:”);

          scanf(“%d”,&c);

          switch(c)

          {case 1:system(“cls”);printf(“輸入多少結(jié)點(diǎn):”);

          scanf(“%d”,&n);m=2*n-1;create_h(n,m,ht);break;

          case 2:system(“cls”);save(n,ht);break;

          case 3:system(“cls”);print_h(m,ht);break;

          case 4:system(“cls”);coding_h(n,ht);break;

          case 5:system(“cls”);decode(m,ht);break;

          case 6:system(“cls”);read(n,ht);break;

          case 7:system(“cls”);exit(0);

          }}while(1);return 0;}

          運(yùn)行界面如下:

          2.學(xué)生成績(jī)管理(鏈表實(shí)現(xiàn))要求:

          實(shí)現(xiàn)如下功能:增加、查找、刪除、輸出、退出。

          代碼如下:

          #include

          #include

          #include

          typedef struct score

          //定義成績(jī)信息結(jié)構(gòu)體 {

          char number[20];char name[20];char chinese[20];char english[20];char math[20];}score;typedef struct node_score

          //定義成績(jī)信息鏈表結(jié)點(diǎn),包括數(shù)據(jù)域和指針域 {

          score data;struct node_score *next;}node_score,*p_node_score;p_node_score headscore;//定義鏈表的頭指針為全局變量 void printscore(score s)//輸出信息函數(shù) { printf(“ %10s”,);printf(“ |

          %-6s”,);printf(“

          |%-3s”,e);printf(“

          |%-3s”,h);

          printf(“ |

          %-3sn”,);} void view()//輸出函數(shù) {

          p_node_score pnodescore;

          pnodescore=headscore;printf(“

          學(xué)號(hào)

          |姓名

          | 語(yǔ)文成績(jī)

          | 英語(yǔ)成績(jī)| 高數(shù)成績(jī)n”);while(pnodescore!= null){

          data);//輸出學(xué)生信息和成績(jī)信息

          next;} } void add(){

          p_node_score pnodescore;// 定義一個(gè)節(jié)點(diǎn)

          pnodescore=(p_node_score)malloc(sizeof(node_score));//為節(jié)點(diǎn)分配存儲(chǔ)空間

          );if(headscore==null){ //如果頭結(jié)點(diǎn)為空

          headscore=pnodescore;

          next=null;} else

          { //如果頭結(jié)點(diǎn)不為空

          next=headscore;

          headscore=pnodescore;//將頭結(jié)點(diǎn)新結(jié)點(diǎn)

          } } void input(){ int n,i;printf(“輸入幾個(gè)學(xué)生的數(shù)據(jù):”);scanf(“%d”,&n);for(i=0;i

          add();printf(“輸入成功!”);} int delete(){ p_node_score pnodescore,p1;//p1為pnodescore的前驅(qū)

          p1=headscore;if(p1==null){

          printf(“成績(jī)表中沒(méi)有數(shù)據(jù)!請(qǐng)先添加數(shù)據(jù)!n”);

          return 0;} char deletenumber[20];

          ,deletenumber)==0)

          { //如果要?jiǎng)h除的結(jié)點(diǎn)在第一個(gè)

          next;

          pnodescore=p1;

          printf(“學(xué)號(hào)為%s的學(xué)生信息已經(jīng)刪除!n”,deletenumber);

          return 0;} else

          {next;

          while(pnodescore!=null)

          {,deletenumber)==0)

          {next;

          printf(“學(xué)號(hào)為%s的學(xué)生信息已經(jīng)刪除!n”,deletenumber);

          return 0;

          }else

          { //否則,結(jié)點(diǎn)向下一個(gè),p1仍為pnodescore的前驅(qū)

          p1=pnodescore;

          next;

          }} } printf(“沒(méi)有此學(xué)號(hào)的學(xué)生!”);} int change(){

          p_node_score pnodescore;

          pnodescore=headscore;if(pnodescore==null){

          printf(“成績(jī)表中沒(méi)有數(shù)據(jù)!請(qǐng)先添加數(shù)據(jù)!n”);

          return 0;} char editnumber[20];printf(“請(qǐng)輸入你要修改的學(xué)生學(xué)號(hào):”);scanf(“%s”,editnumber);while(pnodescore!=null){

          ,editnumber)==0)

          { //用strcmp比較兩字符串是否相等,相等則返回0

          printf(“原來(lái)的學(xué)生成績(jī)信息如下:n”);//輸出原來(lái)的成績(jī)信息

          printf(“

          學(xué)號(hào)

          |姓名

          | 語(yǔ)文成績(jī)

          | 英語(yǔ)成績(jī)| 高數(shù)成績(jī)n”);

          data);

          printf(“語(yǔ)文新成績(jī):”);

          e);

          printf(“英語(yǔ)新成績(jī):”);

          h);

          printf(“高數(shù)新成績(jī):”);

          );

          printf(“成績(jī)已經(jīng)修改!”);

          return 0;

          }next;//如果不相等,pnodescore則指向下一個(gè)結(jié)點(diǎn)

          } printf(“沒(méi)有此學(xué)號(hào)的學(xué)生!n”);//如果找到最后都沒(méi)有,則輸出沒(méi)有此學(xué)號(hào)的學(xué)生

          } int find(){

          p_node_score pnodescore;

          pnodescore=headscore;if(pnodescore==null){

          printf(“成績(jī)表中沒(méi)有數(shù)據(jù)!請(qǐng)先添加數(shù)據(jù)!n”);

          return 0;} char findnumber[20];printf(“請(qǐng)輸入你要查找的學(xué)生學(xué)號(hào):”);scanf(“%s”,findnumber);while(pnodescore!=null){

          ,findnumber)==0)

          {printf(“你要查找的學(xué)生成績(jī)信息如下:n”);

          printf(“

          學(xué)號(hào)

          |姓名

          | 語(yǔ)文成績(jī)

          | 英語(yǔ)成績(jī)| 高數(shù)成績(jī)n”);

          data);

          return 0;

          }next;} printf(“沒(méi)有此學(xué)號(hào)的學(xué)生!n”);} int main()

          //主函數(shù) { int choice=0;headscore=null;int c;do {

          system(“color 2f”);

          //(“nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt”);

          printf(“nttt 學(xué)生成績(jī)管理系統(tǒng) ttt”);

          printf(“nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt”);

          printf(“nttt1.輸入成績(jī)信息nttt2.輸出成績(jī)信息nttt3.添加成績(jī)信息nttt”);

          printf(“4.修改成績(jī)信息nttt5.刪除成績(jī)信息nttt6.查詢(xún)成績(jī)信息nttt7.退出”);

          printf(“nnttt請(qǐng)選擇:”);

          scanf(“%d”,&c);

          switch(c)

          {case 1:system(“cls”);input();break;

          case 2:system(“cls”);view();break;

          case 3:system(“cls”);add();break;

          case 4:system(“cls”);change();break;

          case 5:system(“cls”);delete();break;

          case 6:system(“cls”);find();break;

          case 7:system(“cls”);exit(0);

          }}while(1);return 0;}

          運(yùn)行界面如下:

          2023高考備考攻略

          高考資訊推薦

          范文大全

          更三高考范文大全欄目為大家提供各類(lèi)常用范文、讀后感演講稿、思 ... [進(jìn)入專(zhuān)欄]

          報(bào)考信息

          動(dòng)態(tài)簡(jiǎn)章計(jì)劃錄取分?jǐn)?shù)