數(shù)據(jù)結(jié)構(gòu)實訓_第1頁
數(shù)據(jù)結(jié)構(gòu)實訓_第2頁
數(shù)據(jù)結(jié)構(gòu)實訓_第3頁
數(shù)據(jù)結(jié)構(gòu)實訓_第4頁
數(shù)據(jù)結(jié)構(gòu)實訓_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓數(shù)據(jù)結(jié)構(gòu)實訓 課程課程設(shè)計說明書設(shè)計題目:隊列的基本操作專 業(yè):班級學號:姓 名:指導教師:2019 年12 月2 日教務(wù)處印制數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓課程設(shè)計任務(wù)書課題名稱:隊列的基本操作設(shè)計內(nèi)容:1.編寫鏈接隊列的基本操作函數(shù)2. 使用鏈接隊列的函數(shù)實現(xiàn)操作3. 招聘模擬技術(shù)條件或要求:C+ 6.0指導教師(簽名): 教研室主任(簽名): 開題日期:2019 年12 月2日完成日期:2019 年12 月5 日目錄一、目的及要求 4二、需求分析 41、實現(xiàn)要求 42、設(shè)計思路4三、實驗內(nèi)容41、編寫鏈接隊列的基本操作函數(shù)。 42、調(diào)用上述函數(shù)實現(xiàn)下列操作,操作步驟如下

2、: 43、流程圖53.1 隊列流程圖53.2 招聘模擬流程圖64、程序代碼94.1程序運行結(jié)果115、招聘模擬程序 125.1程序運行結(jié)果17四、總結(jié)18、目的及要求1、 掌握鏈接存儲隊列的進隊和出隊等基本操作;2、 掌握環(huán)形隊列的進隊和出隊等基本操作;3、 加深對隊列結(jié)構(gòu)的理解,逐步培養(yǎng)解決實際問題的編程能力二、需求分析1、實現(xiàn)要求要求程序輸出每個工種的錄用者信息(編號、成績) 者的信息(編號、成績)2、設(shè)計思路程序中按應(yīng)聘者成績從高到低的順序進行排隊錄取。如果在第一5并按其第二志 愿隊列中落選,便將他的成績扣去 5分后重新排隊,志愿考慮錄取。程序為每個工種保留一個錄取者的有序隊列。錄取處

3、理循環(huán)直至招聘額滿或已對全部應(yīng)聘者都做了錄用處理。三、實驗內(nèi)容1、編寫鏈接隊列的基本操作函數(shù)。2、調(diào)用上述函數(shù)實現(xiàn)下列操作,操作步驟如下:(1)、調(diào)用進隊函數(shù)建立一個隊列;數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓(2)、讀取隊列的第一個元素;(3)、從隊列中刪除元素;(4)、輸出隊列中所有元素。3、流程圖3.1 隊列流程圖h Md-h Md退出恚境)數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓3.2 招聘模擬流程圖void OutPutStu(STU *p) 輸出應(yīng)聘人員有序隊列中編號和成績開始f口Cp ! = NULL 二printf('%dp->norp'>total!);ENDvoid Free

4、Stu(STU*p) 釋放應(yīng)聘人員空間開始STU q;whileCp!=NULL)q=*P;*p=*p)->nextfree(q);ENDvoid Insert(STU*p,STU*u)安排出成績從大到小順序插隊數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓int InitJob(JOB *h,int n,int *all)隨機生成工種信息向仃。廿萬%|二比Mntfg工件總團工粗號(出那駟他)AQ' .、判斷申泊內(nèi)存虻否為空1 . 1¥ J二、X N例inti內(nèi)第 出唱演W:rel urn-1:帕巾=0靛吧+) pp.lmt rsnrfom(10+i, pij.(Mjnt=Ctpi 國 zM

5、UlL:all *-pi.lmt: 輸出itlT利用整人敢 由出總招聘人激*p;rEtwn a _ENDint InitStu(STU *h,int n, int m)隨機生成應(yīng)聘人員信息程SIUt inti;p附螭欣康捐磁赧想2加)師胛內(nèi)存申娥口吸retum 4p->no=i;p-> 疑 叩-> sortnr 市 ndom (2Q1); p- k口二加dom飾 國人員第一志恩 p,河gmdom網(wǎng);©!店S二馥po?iR;黜(弱,鰥副旗2)謂用I帙她p): printf(V7 return Q;END11數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓void main()射門出+l

6、63;刖,加曲肌11,曜<=肌吐刖,Eter可:師毗融律尊”領(lǐng)田謝3sarffW4m):rPlUT(”p1ut(fr閣時foitinue,kii晶曲diMd,h用( Mretunt麗:氤融.珈A同市 XtPiiKhgaE:Ahile(dll >Q a& h“d-NULLJp'liead;he4d=b«Ad->nt:i 一口 >/p >?i;""-j-一rz(i.<ouii1<r2|*.lnit一一"丫 一 一閃ni.count+;In 電 1(也 f 則,Ml1rp);dlL'; cont

7、inue; y,-np->next=ower;6WT-P;(.ontinut?;d >jortm -DEMAfiKr添工神已第一法檔i-1;此第二一;*Inaeft he.dpk 里新人 UKFen j = OJ < in. + *)pn rtfHn工碑由出的月情硒i謫;Rffl Out PulSluMiprints,n*kpfiMK、溶譜人員*;Out Puts tu(head)rOutPulSluCovti.rrwStu(&ill,&tu):伯白 VtufSlhoad:;Fr-pS-fi,4 nv產(chǎn)中frw敏喃-END#數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓4、程序代碼

8、#include "stdafx.h"#include <iostream.h>#include <stdio.h>#include<stdlib.h>/#include <alloc.h>typedef struct queueint data;struct queue*link;QUEUE;void EnQueue(QUEUE*head,QUEUE*tail,int x) /* 進隊操作 */QUEUE *p;p=(QUEUE*)malloc(sizeof(QUEUE);p->data=x;p->link=NU

9、LL;/*隊尾指向空 */if(*head=NULL)/* 隊首為空,即為空隊列*/*head=*tail=p;else(*tail)->link=p; /*新單元進隊列尾*/*tail=p;/*隊尾指向新入隊單元*/int DeQueue(QUEUE*head,QUEUE *tail, int*cp) /* 出隊操作 1:隊空*/ QUEUE*p;p=*head;if(*head = NULL) /* 隊空*/return 1;9數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓*cp = (*head)->data;*head =(*head)->link;if(*head=NULL)/*隊首為空

10、,隊尾也為空*/*tail=NULL; /* 釋放單元*/free(p);return 0;/*輸出隊列中元素*/void OutputQueue(QUEUE*head)while (head != NULL) printf("%d",head->data);head=head->link;printf("n");void main()QUEUE *head, *tail;int op, i;head=tail=NULL;/*將隊列頭和尾置為空*/while(1)printf("請選擇操作,1:進隊2:出隊0:退出) fflush(

11、stdin);/*清空標準輸入緩沖區(qū)*/ scanf( "%d", &op );switch(op)case 0: /*® 出 */return;case 1: /*® 隊 */A io1M數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓printf("請輸入進隊元素:");scanf("%d", &i);EnQueue(&head, &tail, i );printf("隊內(nèi)元素為:n");OutputQueue(head);break;case 2: /*出隊 */if(DeQueu

12、e(&head, &tail, &i)=0)/* 出隊成功 */printf("出隊元素為:%d,隊內(nèi)元素為:n" ,i); OutputQueue(head);elseprintf("隊空n");break;4.1程序運行結(jié)果數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓5、招聘模擬程序#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define DEMARK 5/*按第二批錄用的扣分成績*/typedef struct stu/*定義招聘人員信息結(jié)構(gòu)*/

13、int no,total,z2,sortm,zi;/*編號,總成績,志愿,排除成績,錄取志愿號 */ struct stu *next;STU;/*結(jié)構(gòu)變量名*/typedef struct jop/*定義錄用計劃信息結(jié)構(gòu) */int lmt,count;/*計劃錄用人數(shù),已錄用人數(shù)*/STU *stu;/*錄用者有序隊列*/JOB;STU *head=NULL,*over=NULL;/初始化頭指針和尾指針int all;int random(int n) 定義 random 函數(shù)int rn=0;rn=rand()%n;return rn;void OutPutStu(STU *p)輸出應(yīng)聘

14、人員有序隊列中的編號和成績for(;p!=NULL;p=p->next) 判斷 p 指針是否為空 printf("%d(%d)t",p->no,p->total); 輸出成員的編號和成績void FreeStu(STU *p)/釋放應(yīng)聘人員空間STU *q;while(*p!=NULL)*p=(*p)->next;free(q);void Insert(STU *p,STU *u)/*按排除成績從大到小順序插隊*/171MSTU *v,*q;插隊元素的前后元素指針for(q=*p;q!=NULL;v=q,q=q->next)if(q->s

15、ortm<u->sortm)/隊中工人的成績插入元素成績break;if(q=*p)插入到隊首*p=u;else/為隊首插入v->next=u;u->next=q;/新元素的后繼元素指針int InitJob(JOB *h,int n,int *all)/*隨機生成工種信息 */int i;JOB *p;*all=0;printf("工種信息工種號(計劃招聘人數(shù))n");if(p=(JOB*)malloc(n*sizeof(JOB)=NULL)printf("內(nèi)存申請錯誤!n");return -1;for(i=0;i<n;

16、i+)pi.lmt=random(10)+1;假設(shè)工種招聘人數(shù)為 110/pi.count=0;pi.stu=NULL;*all+=pi.lmt;數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓printf("%d(%d)t",i,pi.lmt);printf("n 總招聘人數(shù)%dn",*all);*h=p;return 0;int InitStu(STU *h,int n,int m)/*隨機生成應(yīng)聘人員信息*/STU *p;int i;printf("應(yīng)聘人員信息編號,成績,志愿1,志愿2n");for(i=0;i<n;i+)if(p=(STU*)

17、malloc(sizeof(STU)=NULL)printf("內(nèi)存申請錯誤!n");return -1;p->no=i;p->total=p->sortm=random(201);p->z0=random(m);/* 應(yīng)聘人員第一志愿0m-1*/p->z1=random(m);/* 應(yīng)聘人員第一志愿0m-1*/p->zi=0;錄取志愿初始化為0,即第一志愿printf("%d,%3d,%d%dt",i,p->total,p->z0,p->z1);Insert(h,p);printf("n&

18、quot;);return 0;void main()int m;工種總數(shù),編號為 0m-1int n;應(yīng)聘人員總數(shù)JOB *rz;int all;計劃招聘人員總數(shù)STU *head=NULL,*over=NULL;/ 應(yīng)聘人員隊列,落聘人員隊列STU *p;int i;while (1)m=n=0;printf("請輸入工種總數(shù)(120),=0:退出");scanf("%d",&m);if(m=0)/ 退出return;if(m>20|m<0)continue;if(InitJob(&rz,m,&all)!=0)生成

19、工種信息return;printf("n請輸入應(yīng)聘人員總數(shù)(5400),=0:退出)scanf("%d",&n);if(n=0)/ 退出return;if(n<5|n>400)free(rz);/釋放應(yīng)聘人員信息continue;if(InitStu(&head,n,m)!=0) 生成應(yīng)聘人員信息return;printf("n應(yīng)聘人員隊列n");OutPutStu(head);while(all>0&&head!=NULL)/當人員沒有招滿且隊列不為空p=head;取應(yīng)聘人員隊首指針head=

20、head->next;隊首指針下移i=p->zp->zi;/取該應(yīng)聘人員的應(yīng)聘工種號19數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓if(rzi.count<rzi.lmt)該工種人員沒招滿rzi.count+;Insert(&rzi.stu,p);all-;continue;if(p->zi>=1)p->next=over;/該工人入落聘者隊列over=p;continue;p->sortm-=DEMARK; 該工種已招滿,工人分數(shù)降檔p->zi=1;該工人改為第二志愿Insert(&head,p);/ 重新入隊for(i=0;i<m;

21、i+)printf("n 工種%d招聘情況 n",i);OutPutStu(rzi.stu);printf("n");printf("n 落聘人員 n");OutPutStu(head);OutPutStu(over);printf("n");for(i=0;i<m;i+)/*釋放人員工種招聘人員空間*/FreeStu(&rzi.stu);FreeStu(&head);/*釋放落聘人員空間*/FreeStu(&over);/*釋放落聘人員空間*/free(rz);/釋放工種信息空間1M數(shù)據(jù)結(jié)構(gòu)(C語言版)實訓5.1程序運行結(jié)果塞舞. l :U sersCJD5ktC'PV'LXsybLiebijg5y6.eKe詰諭入種總款門7201=。詛由1匚坤信息I(檸與讓,劃招用人it卜0(2)通招聘人敢組而輸入鹿曬人村總靠仿F

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論