數(shù)據(jù)結構-實驗-隊列的基本操作_第1頁
數(shù)據(jù)結構-實驗-隊列的基本操作_第2頁
數(shù)據(jù)結構-實驗-隊列的基本操作_第3頁
數(shù)據(jù)結構-實驗-隊列的基本操作_第4頁
數(shù)據(jù)結構-實驗-隊列的基本操作_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上 數(shù)據(jù)結構 實驗報告實驗名稱:實驗五 隊列的基本操作一、實驗目的:1、 掌握鏈接存儲隊列的進隊和出隊等基本操作2、 掌握環(huán)行隊列的進隊和出隊等基本操作3、 加深對隊列結構的理解,逐步培養(yǎng)解決實際問題的編程能力二、實驗環(huán)境:計算機,同學,vc+三、實驗內容和要求:(一)基礎題1、編寫鏈接隊列的基本操作函數(shù)() EnQueue( QUEUE *head, QUEUE *tail, int x )進隊操作 () DeQueue( QUEUE *head, QUEUE *tail, int *cp )出隊操作() OutputQueue( QUEUE *head )輸出隊列中

2、元素 2、調用上述函數(shù)實現(xiàn)下列操作,操作步驟如下:(1)調用進隊函數(shù)建立一個隊列;(2)讀取隊列的第一個元素;(3)從隊列中刪除元素;(4)輸出隊列中所有元素。注:每完成一個步驟,必須及時輸出隊列中元素,便于觀察操作結果。3、編寫環(huán)型隊列的基本操作函數(shù)() EnQueue( int *queue, int maxn, int *head, int *tail, int x ) 進隊操作, 返回1:隊滿 () DeQueue( int *queue, int maxn, int *head, int *tail, int *cp ) 出隊操作 返回1:隊空 () OutputQueue( int

3、 *queue, int maxn, int h, int t )輸出隊列中元素 4、調用上述函數(shù)實現(xiàn)下列操作,操作步驟如下:(1) 調用進隊函數(shù)建立一個隊列;(2)讀取隊列的第一個元素;(3)從隊列中刪除元素;(4) 輸出隊列中所有元素。四、實驗步驟:從網上把word 下載下來,認真的看題目,思考和同學討論在老師的幫助下,完成了題目。五、實驗結果與分析(含程序、數(shù)據(jù)記錄及分析和實驗總結等):基礎題一#include<stdio.h>#include<alloc.h>typedef struct queue /* 定義隊列結構 */int data; /* 隊列元素類型

4、為int */struct queue *link;QUEUE;void EnQueue( QUEUE *head, QUEUE *tail, int x )/* 進隊操作 */QUEUE *p;p = (QUEUE *)malloc( sizeof(QUEUE) ); p->data = x;p->link = NULL;/* 隊尾指向空 */if( *head = NULL )/* 隊首為空,即為空隊列 */ *head = *tail = p;else (*tail)->link = p;/* 新單元進隊列尾 */*tail = p;/* 隊尾指向新入隊單元 */ in

5、t DeQueue( QUEUE *head, QUEUE *tail, int *cp )/* 出隊操作 1:對空 */QUEUE *p; p = *head;if( *head = NULL )/* 隊空 */return 1;*cp = (*head)->data;*head =(*head)->link;if( *head = NULL ) /* 隊首為空,隊尾也為空 */*tail = NULL;free( p );/* 釋放單元 */ return 0;void OutputQueue( QUEUE *head )/* 輸出隊列中元素 */while (head !=

6、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( stdin );/* 清空標準輸入緩沖區(qū) */scanf( "%d", &op );switch( op )

7、 case 0:/* 退出 */return 0;case 1:/* 進隊 */printf( "請輸入進隊元素:" ); scanf( "%d", &i ); EnQueue( &head, &tail, i );printf( "隊內元素為:n" );OutputQueue( head );break;case 2:/* 出隊 */if(DeQueue( &head, &tail, &i )= 0 ) /* 出隊成功 */printf( "出隊元素為: %d , 隊內元素為

8、:n" , i );OutputQueue( head );elseprintf( "隊空n" );break;基礎題 二#include<stdio.h>#include<alloc.h>#define MAXN 11/* 定義環(huán)行順序隊列的存儲長度 */int EnQueue( int *queue, int maxn, int *head, int *tail, int x )/* 進隊操作, 返回1:隊滿 */if( *tail + 1 ) % maxn= *head )/* 隊尾指針趕上隊首指針, 隊滿 */return 1; *

9、tail =( *tail + 1 ) % maxn ;/* 隊尾指針+1 */queue*tail = x;/* 元素入對尾 */ return 0;int DeQueue( int *queue, int maxn, int *head, int *tail, int *cp )/* 出隊操作 返回1:隊空 */if( *head = *tail )/* 隊首=隊尾, 表明隊列為空 */return 1;*head = ( *head + 1 ) % maxn;/* 隊首指針+1 */ *cp = queue*head;/* 取出隊首元素 */ return 0;void OutputQu

10、eue( int *queue, int maxn, int h, int t )/* 輸出隊列中元素 */while(h != t ) /* */h = ( h + 1 ) % maxn;printf( "%d ", queueh ); printf( "n" );void main()int qMAXN;/* 假設環(huán)行隊列的元素類型為int */int q_h=0, q_t=0;/* 初始化隊首,隊尾指針為0 */ int op, i; while( 1 )printf( "請選擇操作,1:進隊 2:出隊 0:退出 " );ffl

11、ush( stdin );/* 清空標準輸入緩沖區(qū) */scanf( "%d", &op );switch( op ) case 0:/* 退出 */return 0;case 1:/* 進隊 */printf( "請輸入進隊元素:" ); scanf( "%d", &i );if(EnQueue( q, MAXN, &q_h, &q_t, i )!= 0 )printf( "隊列滿n" ); else printf( "入隊成功, 隊內元素為:n" );Outp

12、utQueue( q, MAXN, q_h, q_t ); break;case 2:/* 出隊 */if(DeQueue( q, MAXN, &q_h, &q_t, &i )= 0 ) /* 出隊成功 */printf( "出隊元素為: %d , 隊內元素為:n" , i );OutputQueue( q, MAXN, q_h, q_t );elseprintf( "隊空n" );break;提高題一#include<stdio.h>#include<stdlib.h>#include<alloc.

13、h>typedef struct int arrive;/* 病人到達時間 */int treat;/* 病人處理時間 */PATIENT;typedef struct queue /* 定義隊列結構 */PATIENT data;/* 隊列元素類型為int */struct queue *link;QUEUE;void EnQueue( QUEUE *head, QUEUE *tail, PATIENT x )/* 進隊操作 */QUEUE *p;p = (QUEUE *)malloc( sizeof(QUEUE) );p->data = x;p->link = NULL;

14、/* 隊尾指向空 */if( *head = NULL )/* 隊首為空,即為空隊列 */*head = *tail = p;else (*tail)->link = p;/* 新單元進隊列尾 */*tail = p;/* 隊尾指向新入隊單元 */ int DeQueue( QUEUE *head, QUEUE *tail, PATIENT *cp )/* 出隊操作 1:對空 */QUEUE *p; p = *head;if( *head = NULL )/* 隊空 */return 1;*cp = (*head)->data;*head = (*head)->link;if

15、( *head = NULL ) /* 隊首為空,隊尾也為空 */*tail = NULL;free( p );/* 釋放單元 */ return 0;void OutputQueue( QUEUE *head )/* 輸出隊列中元素 */while(head != NULL ) printf( "到達時間: %d 處理時間: %dn ", head->data.arrive, head->data.treat );head = head->link;void InitData( PATIENT *pa, int n )/* 生成病人到達及處理時間的隨機數(shù)

16、列 */int parr = 0;/* 前一個病人到達的時間 */ int i;for( i = 0; i < n; i+ ) pai.arrive = parr + rand( 15 );/* 假設病人到達的時間間隔為 014 */pai.treat = rand( 9 ) + 1;/* 假設醫(yī)生處理時間為 19 */parr = pai.arrive; printf( "第%d個病人到達時間為%d處理時間為%dn", i+1, parr, pai.treat ); void main()QUEUE *head, *tail; PATIENT *p, curr;/*

17、 病人到達及處理時間信息, 當前出隊病人信息 */int n, i, finish;int nowtime;/* 時鐘 */int dwait, pwait;/* 醫(yī)生累計等待時間, 病人累計等待時間 */head = tail = NULL;/* 將隊列頭和尾置為空 */ while( 1 )n = 0; nowtime = dwait = pwait = 0;printf( "請輸入病人總數(shù)(120),= 0:退出 " );scanf( "%d", &n );if( n = 0 )/* 退出 */return 0;if( n > 20

18、| n < 0 ) continue; if( ( p = ( PATIENT *)malloc( n * sizeof( PATIENT ) ) ) = NULL ) printf( "內存申請錯誤n" ); return 1; InitData( p, n ); /* 生成病人到達及處理時間的隨機數(shù)列 */for( i = 0;i < n | head != NULL ; ) /* 病人到達未結束或還有等待, 處理 */if( head = NULL ) /* 等待隊列為空 */if(pi.arrive - nowtime > 0)/* 病人到達時間與上次處理時間遲 */ dwait += pi.arrive - nowtime;/* 累計醫(yī)生等待時間 */nowtime = pi.arrive

溫馨提示

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

評論

0/150

提交評論