數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)與實(shí)訓(xùn)教程第4版程序代碼_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)與實(shí)訓(xùn)教程第4版程序代碼_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)與實(shí)訓(xùn)教程第4版程序代碼_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)與實(shí)訓(xùn)教程第4版程序代碼_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)與實(shí)訓(xùn)教程第4版程序代碼_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目 錄第一部分 預(yù)備知識(shí)1預(yù)備知識(shí)1預(yù)備知識(shí)實(shí)驗(yàn)2第二部分 基礎(chǔ)實(shí)驗(yàn)4實(shí)驗(yàn)1 線性表的基本操作4實(shí)驗(yàn)2 鏈表的基本操作9實(shí)驗(yàn)3 棧的基本操作15實(shí)驗(yàn)4 隊(duì)列的基本操作22實(shí)驗(yàn)5 數(shù)組的基本操作32實(shí)驗(yàn)6 字符串的基本操作36實(shí)驗(yàn)7 二叉樹的基本操作41實(shí)驗(yàn)8 樹的遍歷和哈夫曼樹46實(shí)驗(yàn)9 圖的基本操作53實(shí)驗(yàn)10 排 序59實(shí)驗(yàn)11 查 找64第三部分 課程設(shè)計(jì)實(shí)驗(yàn)69實(shí)驗(yàn)1 航空客運(yùn)訂票系統(tǒng)69實(shí)驗(yàn)2 漢諾塔游戲程序75實(shí)驗(yàn)3 全屏幕編輯程序設(shè)計(jì)79實(shí)驗(yàn)4 旅游路線安排模擬系統(tǒng)90實(shí)驗(yàn)6 最小生成樹kruskal算法93第一部分 預(yù)備知識(shí)預(yù)備知識(shí)例11 #include <stdio.

2、h> int sumabc(int a, int b, int c) /* 求三個(gè)整數(shù)之和*/ int s; a=b+c;s=a+b+c; return s; void displayLine(void) printf(”-n“);void main( ) int x,y, z ,sabc;x=y=z=8;display(); /* 畫一條線 */printf(“n sum=%d”,sumabc(x,y,z); /* 在輸出語(yǔ)句中直接調(diào)用函數(shù)sumabc( ) */printf(“n %6d%6d%6d”,x,y,z);display();/* 畫一條線 */x=2; y=4; z=6;

3、sabc =sumabc(x, y, z); /* 在賦值語(yǔ)句中調(diào)用函數(shù)sumabc( ) */printf(“n “ sum=%d”, sabc);printf(“n %6d%6d%6d”,x,y,z); display();/* 畫一條線 */ 例1.2 int sumabc(int *a, int b, int c) int s; *a=b+c;s=*a+b+c; return s; 預(yù)備知識(shí)實(shí)驗(yàn)int main() /在main函數(shù)中調(diào)用上述聲明的函數(shù) int n; /記錄個(gè)數(shù) STUDENT stuMAXSIZE;/ 順序存儲(chǔ)結(jié)構(gòu),方法一 靜態(tài)一維數(shù)組。/* 順序存儲(chǔ)結(jié)構(gòu),方法二 動(dòng)

4、態(tài)一維數(shù)組,用malloc函數(shù)分配如下: STUDENT *stu; stu=( STUDENT *) malloc(sizeof(STUDENT)* MAXSIZE);/ 內(nèi)存空間的分配 注意:分配空間可用malloc()函數(shù), 釋放空間用free()函數(shù),如free(stu);*/int index;printf("n 請(qǐng)輸入學(xué)生記錄個(gè)數(shù)n="); scanf(%d”,&n);InputStu(stu, n); / 預(yù)先處理輸入, 建表while(1) / 永真循環(huán),重復(fù)顯示菜單, 直至退出 printf("n*學(xué)生信息管理主菜單*n");

5、printf("t1.顯示學(xué)生信息n"); printf("t2.查找學(xué)生信息n"); printf("t3.修改學(xué)生信息n"); printf("t4.添加學(xué)生信息n"); printf("t5.退出nn"); printf("tt請(qǐng)選擇(15): "); scanf("%d",&index); printf("n*n"); switch(index) case 1: OutputStu(stu,n); break; case

6、 2: SearchStu(stu,n); break; case 3: UpdateStu (stu,n); break; case 4: AppendStu (stu,&n); break; case 5: return 0; default: printf("n輸入有誤,請(qǐng)重新輸入! n"); /switch /while(1)/main第二部分 基礎(chǔ)實(shí)驗(yàn)實(shí)驗(yàn)1 線性表的基本操作四、參考程序程序1:題1 線性表基本操作函數(shù)#include<stdio.h>#include<stdlib.h>#include<alloc.h>

7、struct LinearList *定義線性表結(jié)構(gòu)*/int *list; /* 存線性表元素 */int size; /* 存線性表長(zhǎng)度 */int MaxSize; /* 存list數(shù)組元素個(gè)數(shù) */;typedef struct LinearList LIST;void InitList( LIST *L, int ms )/* 初始化線性表 */if( (L->list = 1 ) = NULL ) printf( "內(nèi)存申請(qǐng)錯(cuò)誤!n" );exit( 1 ); 2 L->MaxSize = ms;int InsertList( LIST *L, in

8、t item, int rc )/* item:記錄值 rc:插入位置 */ int i;if( 3 )/* 線性表已滿 */return -1;if( rc < 0 ) /* 插入位置為 0 -> L->size */rc = 0;if( 4 )rc = L->size;for( i = L->size - 1; i >= rc; i- )/* 將線性表元素后移 */ 5 L->listrc = item;L->size +;return 0; void OutputList( LIST *L )/* 輸出線性表元素 */int i;for(

9、i = 0; 6 i+ )printf( "%d ", L->listi ); printf( "n" );int FindList( LIST *L, int item )/* 返回 >=0 為元素位置 -1 沒找到 */int i;for( i = 0; i < L->size; i+ )if( 7 )/* 找到相同的元素,返回位置 */return i;return -1;/* 沒找到 */int DeleteList1( LIST *L, int item )/* 刪除指定元素值的線性表記錄,返回>=0:刪除成功 *

10、/int i, n;for( i = 0; i < L->size; i+ )if( item = L->listi )/* 找到相同的元素 */break;if( i < L->size ) for( n = i; n < L->size - 1; n+ )L->listn = L->listn+1;L->size -;return i; return -1;int DeleteList2( LIST L, int rc ) /* 刪除指定位置的線性表記錄 */8 /*編寫刪除指定位置的線性表記錄子程序*/程序2:題2 void m

11、ain()LIST LL; int i, r;printf( "list addr=%ptsize=%dtMaxSize=%dn", LL.list, LL.size, LL.MaxSize );InitList( &LL, 100 );printf( "list addr=%ptsize=%dtMaxSize=%dn", LL.list, LL.size, LL.MaxSize );while( 1 )printf( "請(qǐng)輸入元素值,輸入0結(jié)束插入操作:" );fflush( stdin );/* 清空標(biāo)準(zhǔn)輸入緩沖區(qū) */s

12、canf( "%d", &i );if( 1 ) break;printf( "請(qǐng)輸入插入位置:" );scanf( "%d", &r );InsertList( 2 );printf( "線性表為: " ); 3 while( 1 )printf( "請(qǐng)輸入查找元素值,輸入0結(jié)束查找操作:" );fflush( stdin );/* 清空標(biāo)準(zhǔn)輸入緩沖區(qū) */scanf( "%d", &i );if( i = 0 ) break;r = 4 if( r

13、 < 0 )printf( "沒找到n" );elseprintf( "有符合條件的元素,位置為:%dn", r+1 );while( 1 )printf( "請(qǐng)輸入刪除元素值,輸入0結(jié)束查找操作:" );fflush( stdin );/* 清空標(biāo)準(zhǔn)輸入緩沖區(qū) */scanf( "%d", &i );if( i = 0 ) break;r = 5 if( r < 0 )printf( "沒找到n" );else printf( "有符合條件的元素,位置為:%dn線

14、性表為:", r+1 );OutputList( &LL ); while( 1 )printf( "請(qǐng)輸入刪除元素位置,輸入0結(jié)束查找操作:" );fflush( stdin );/* 清空標(biāo)準(zhǔn)輸入緩沖區(qū) */scanf( "%d", &r );if( r = 0 ) break;i = 6 if( i < 0 )printf( "位置越界n" );else printf( "線性表為:" );OutputList( &LL ); 程序4:題4#define X 10#de

15、fine Y 30#define N 20int AN= 2, 5, 15, 30, 1, 40, 17, 50, 9, 21, 32, 8, 41, 22, 49, 31, 33, 18, 80, 5 ;#include<stdio.h>void del( int *A, int *n, int x, int y )int i, j;for( i = j = 0; i < *n; i+ )if( Ai > y | Ai < x )/ 不在x到y(tǒng)之間,則保留 1 ; 2 = j;void output( int *A, int n )int i;printf( &

16、quot;n數(shù)組有%d個(gè)元素:n", n );for( i = 0; i < n; i+ ) printf( "%7d", Ai );if( ( i + 1 ) % 10 = 0 )printf( "n" ); printf( "n" );void main()int n;n = N;output( A, n ); 3 ; output( A, n );實(shí)驗(yàn)2 鏈表的基本操作四、參考程序程序1:題1 鏈表基本操作函數(shù)#include<stdio.h>#include<alloc.h>typede

17、f struct list int data;struct list *next;LIST;void InitList( LIST *p ) /* 初始化鏈表 */1 /*編寫初始化鏈表子程序*/void InsertList1( LIST *p, int item, int rc ) /* 向鏈表指定位置rc插入元素item */ int i;LIST *u, *q, *r;/* u:新結(jié)點(diǎn) q:插入點(diǎn)前驅(qū) r:插入點(diǎn)后繼 */u = ( LIST * )malloc( sizeof(LIST) );u->data = item;for( i = 0, r = *p ; 2 ; i+

18、) q = r;r = r->next;if( 3 )/* 插入首結(jié)點(diǎn)或p為空指針 */*p = u;else 4 u->next = r;void InsertList2( LIST *p, int item )/* 向有序鏈表p插入鍵值為item的結(jié)點(diǎn) */LIST *u, *q, *r;/* u:新結(jié)點(diǎn) q:插入點(diǎn)前驅(qū) r:插入點(diǎn)后繼 */u = ( LIST * )malloc( sizeof(LIST) );u->data = item;for( r = *p; 5 && r->data < item; q = r, r = r->

19、next );/* 從鏈表首結(jié)點(diǎn)開始順序查找 */if( r = *p )/* 插入首結(jié)點(diǎn)或p為空指針 */ 6 elseq->next = u; u->next = r;/* 刪除鍵值為item的鏈表結(jié)點(diǎn), 返回0: 刪除成功 1: 沒找到 */int DeleteList( LIST *p, int item )LIST *q, *r;/* q:結(jié)點(diǎn)前驅(qū) r:結(jié)點(diǎn)后繼 */q = *p;if( q = NULL )/* 鏈表為空 */return 1;if( q->data = 7 ) /* 要?jiǎng)h除鏈表首結(jié)點(diǎn) */p = q->link;/* 更改鏈表首指針 */

20、8 /* 釋放被刪除結(jié)點(diǎn)的空間 */return 0;/* 刪除成功 */for( ; 9 && 10 ; r = q, q = q->next );/* 尋找鍵值為item的結(jié)點(diǎn) */if( q->data = item ) /* 找到結(jié)點(diǎn) */ q->next=r->next /* 被刪結(jié)點(diǎn)從鏈表中脫離 */free( q );/* 釋放被刪除結(jié)點(diǎn)的空間 */return 0;/* 刪除成功 */ return 1;/* 沒有指定值的結(jié)點(diǎn), 刪除失敗 */* 查找鍵值為item的鏈表結(jié)點(diǎn)位置, 返回>=1: 找到 -1: 沒找到 */int F

21、indList( LIST *p, int item )int i;for( i = 1; p->data != item && p != NULL ; 11 , i+ );/* 查找鍵值為item的結(jié)點(diǎn) */return ( p = NULL ) ? -1 : i;/* 找到返回i */void OutputList( LIST *p )/* 輸出鏈表結(jié)點(diǎn)的鍵值 */while( 12 ) printf( "%4d", p->data );p = p->next;/* 遍歷下一個(gè)結(jié)點(diǎn) */ void FreeList( LIST *p )

22、/* 釋放鏈表空間 */LIST *q, *r;for( q = *p; q != NULL; ) 13 q = q->next; 14 *p = NULL;/* 將鏈表首指針致空 */程序2:題2void main() LIST *p;int op, i, rc; InitList( &p );/* 初始化鏈表 */ while( 1 )printf( "請(qǐng)選擇操作 1:指定位置追加 2: 升序追加 3: 查找結(jié)點(diǎn)n" );printf( " 4: 刪除結(jié)點(diǎn) 5: 輸出結(jié)點(diǎn) 6: 清空鏈表 0:退出n" );fflush( stdin )

23、;/* 清空標(biāo)準(zhǔn)輸入緩沖區(qū) */scanf( "%d", &op );switch( op ) case 0:/* 退出 */return;case 1:/* 指定位置追加結(jié)點(diǎn) */printf( "請(qǐng)輸入新增結(jié)點(diǎn)鍵值和位置:" );scanf( "%d%d", &i, &rc ); 1 ;break;case 2:/* 按升序追加結(jié)點(diǎn) */printf( "請(qǐng)輸入新增結(jié)點(diǎn)鍵值:" );scanf( "%d", &i );InsertList2( &p,

24、i );break;case 3:/* 查找結(jié)點(diǎn) */printf( "請(qǐng)輸入要查找結(jié)點(diǎn)的鍵值:" );scanf( "%d", &i );rc = 2 ;if( rc > 0 )printf( " 位置為%dn", rc );else printf( " 沒找到n" );break;case 4:/* 刪除結(jié)點(diǎn) */printf( "請(qǐng)輸入要?jiǎng)h除結(jié)點(diǎn)的鍵值:" );scanf( "%d", &i );rc = 3 ;if( rc = 0 )printf

25、( " 刪除成功n", rc );else printf( " 沒找到n" );break;case 5:/* 輸出結(jié)點(diǎn) */printf( "n鏈表內(nèi)容為:n" ); 4 ;break;case 6:/* 清空鏈表 */ 5 ; break;程序3:題3#include<stdio.h>#include<alloc.h>typedef struct node int x;struct node *next;NODE;void input( NODE *a )NODE *p, *q; int i;printf(

26、 "請(qǐng)輸入鏈表的元素,-1表示結(jié)束n" ); *a = NULL;while( 1 ) scanf( "%d", &i );if( i = -1 )break;p = ( NODE * )malloc( sizeof(NODE) );p->x = i;p->next = NULL;if( *a = NULL )*a = q = p;else q->next = p;q = q->next; void output( NODE *a )int i;for( i = 0; a != NULL; i+, a = a->ne

27、xt ) printf( "%7d", a->x );if( ( i + 1 ) % 10 = 0 )printf( "n" ); printf( "n" );void disa( NODE *a, NODE *b )NODE *r, *p, *q;p = a;r = *b = ( a = NULL ) ? NULL : a->next;/ 如果鏈表a為空,則鏈表b也為空while( 1 && 2 ) q = p->next;/ q指向偶數(shù)序號(hào)的結(jié)點(diǎn) 3 / 將q從原a鏈表中刪除r->next

28、= q;/ 將q結(jié)點(diǎn)加入到b鏈表的末尾 4 / r指向b鏈表的最后一個(gè)結(jié)點(diǎn) p = p->next;/ p指向原a鏈表的奇數(shù)序號(hào)的結(jié)點(diǎn)r->next = NULL;/ 將生成b鏈表中的最后一個(gè)結(jié)點(diǎn)的next域置空void main()NODE *a, *b;input( &a );printf( "鏈表a的元素為:n" );output( a ); 5 printf( "鏈表a的元素(奇數(shù)序號(hào)結(jié)點(diǎn))為:n" );output( a );printf( "鏈表b的元素(偶數(shù)序號(hào)結(jié)點(diǎn))為:n" );output( b

29、);實(shí)驗(yàn)3 棧的基本操作四、參考程序程序1:題1 棧的基本操作函數(shù)#include<stdio.h>#define MAXN 10/* 棧的最大容量 */* 定義棧的類型為int */int push( int *stack, int maxn, int *toppt, int x )/* 進(jìn)棧函數(shù) */if( *toppt >= maxn )/* 1 */return 1; 2 /* 元素進(jìn)棧 */+(*toppt); /* 棧頂指針+1 */ return 0;/* 進(jìn)棧成功 */int pop( int *stack, int *toppt, int *cp )/*出棧

30、函數(shù)*/if( 3 )/* ??眨鰲J?,返回1 */return 1;-(*toppt);/* 棧頂指針-1 */ 4 return 0;/* 出棧成功 */void OutputStack( int *stack, int toppt )/* 輸出棧元素 */int i;for( i = 5 ; i >= 0; i- )printf( "%d ", stacki );printf( "n" );程序2:題2 主函數(shù)void main()int sMAXN, i;/* 定義棧 */int top = 0;/* 設(shè)置為空棧 */ int op;

31、while( 1 )printf( "請(qǐng)選擇操作,1:進(jìn)棧 2:出棧 0:退出 " );fflush( stdin );/* 清空標(biāo)準(zhǔn)輸入緩沖區(qū) */scanf( "%d", &op );switch( op ) case 0:/* 退出 */return;case 1:/* 進(jìn)棧 */printf( "請(qǐng)輸入進(jìn)棧元素:" ); scanf( "%d", &i );if( 1 ) /* 進(jìn)棧成功 */printf( "進(jìn)棧成功,棧內(nèi)元素為:n" );OutputStack( s,

32、 top );elseprintf( "棧滿n" ); break;case 2:/* 出棧 */if( 2 ) /* 出棧成功 */printf( "出棧元素為: %d , 棧內(nèi)元素為:n" , i ); 3 elseprintf( "??課" );break;程序3:題3 配對(duì)函數(shù)int correct( char *exp, int max )/* 傳入?yún)?shù)為表達(dá)式、表達(dá)式長(zhǎng)度,返回0:成功,返回1:錯(cuò)誤*/int flag = 0;/* 括號(hào)匹配標(biāo)志,0: 正確 */char sMAXN;/* 定義棧 */int top =

33、0;/* 棧指針為0,表示空棧 */ char c;int i;for( i = 0; 1 ; i+ ) /* 循環(huán)條件為表達(dá)式未結(jié)束且括號(hào)匹配 */if( expi='(' | expi='' | expi='' push( s, MAXN, &top, expi );if( expi=')' | expi='' | expi='' ) /* 遇到, 出棧 */ 2 /* 置出棧結(jié)果, ??粘鲥e(cuò) */if( ( expi=')' && c!='(&#

34、39; ) | ( expi='' && c!='' ) | ( expi='' && c!='' ) )/* 括號(hào)不匹配 */flag = 1; if( 3 )/* 棧不為空,表明還有(,符號(hào)沒匹配 */flag = 1; return flag;void main()char sMAXN, c;/* 定義棧 */ char exp1024;int top = 0;/* 設(shè)置為空棧 */while( 1 ) printf( "請(qǐng)輸入表達(dá)式, 輸入0退出: " );gets( e

35、xp );/* 從標(biāo)準(zhǔn)輸入中讀取表達(dá)式 */expMAXN = '0'/* 表達(dá)式長(zhǎng)度 <= MAXN */if( strcmp( exp, "0" ) = 0 ) 4 if( 5 )printf( "表達(dá)式內(nèi)容為:n%sn表達(dá)式括號(hào)不匹配n" , exp );elseprintf( "表達(dá)式括號(hào)匹配n" ); 程序4:題4 波蘭表達(dá)式#include<stdio.h>#include<alloc.h>#define MAXN 100/* 棧的最大容量 */int pushc( )/* c

36、har型元素進(jìn)棧函數(shù) */*編寫進(jìn)棧子程序*/int popc( char *stack, int *toppt, char *cp )/* char型元素出棧函數(shù) */*編寫出棧子程序*/int eval( )/* 算術(shù)運(yùn)算 */*編寫算術(shù)運(yùn)算子程序*/int operate( char *str, int *exp )/* 計(jì)算后綴表達(dá)式的值, 返回0:成功 -1:表達(dá)式錯(cuò)誤 -2:棧滿 */char c;int opd1, opd2, temp, c1; int sMAXN;int i; int top = 0;for( i = 0; stri != '0' i+ )c

37、= stri;if( c >= '0' && c <= '9' )/* 數(shù)字進(jìn)棧 */c1 = c - '0'/* 將字符轉(zhuǎn)換成數(shù)字值 */if( push( s, MAXN, &top, c1 ) != 0 )printf( "表達(dá)式太長(zhǎng), 棧滿" );return -2;else if( c = '+' | c = '-' | c = '*' | c = '/' ) /* 運(yùn)算符 */pop( s, &top, &a

38、mp;opd1 );if( pop( s, &top, &opd2 ) != 0 )return -1;temp = eval( c, opd2, opd1 ); 1 ;elsereturn -1; 2/* 取出結(jié)果 */if( top != 0 )/* 棧非空 */return -1;return 0; int trans( char *sin, char *sout )/* 將中綴表達(dá)式轉(zhuǎn)換成后綴, 返回0: 處理成功 */char sMAXN, c;/* 定義棧, 棧元素 */3/* 設(shè)置為空棧 */int off = 0;/* 數(shù)組下標(biāo) */int i;for( i =

39、 0; sini != '0' i+ )/* 遇到休止符, 表示表達(dá)式輸入結(jié)束 */if( sini >= '0' && sini <= '9' )/* 輸入數(shù)字, 進(jìn)數(shù)組 */sout 4 = sini;else switch( sini ) case '(':/* 左括號(hào), 括號(hào)入棧 */pushc( s, MAXN, &top, sini ); break;case ')':/* 右括號(hào), 將棧中左括號(hào)前的元素出棧, 存入數(shù)組 */while( 1 )if( popc( s

40、, &top, &c ) != 0 )/* ???*/printf( "表達(dá)式括號(hào)不匹配n" );return -1; if( c = '(' )/* 找到匹配的括號(hào) */break; sout off+ = c;/* 棧頂元素入數(shù)組 */ break;case '+':/* 為'+','-',將棧中左括號(hào)前的元素出棧, 存入數(shù)組 */case '-':while( top > 0 && stop-1 != '(' ) 5 sout off+

41、 = c;pushc( s, MAXN, &top, sini );/* '+','-'符號(hào)入棧 */ break;case '*':/* 為'*','/', 將棧頂'*','/'符號(hào)出棧, 存入數(shù)組 */case '/':while( top>0 && (stop-1 = '*' | stop-1 = '/' ) )popc( s, &top, &c );sout off+ = c;/*這

42、段循環(huán)如何用if語(yǔ)句實(shí)現(xiàn)? */pushc( s, MAXN, &top, sini );/* '*','/'符號(hào)入棧 */ break;while( 6 )/* 所有元素出棧, 存入數(shù)組 */sout off+ = c;sout off = '0'/* 加休止符 */return 0;void main()char *sin;/* 輸入表達(dá)式指針, 中綴表示 */char *sout;/* 輸出表達(dá)式指針, 后綴表示 */int i;sin = (char *)malloc( 1024 * sizeof(char) );sout = (

43、char *)malloc( 1024 * sizeof(char) );if(7) printf( "內(nèi)存申請(qǐng)錯(cuò)誤!n" );return;printf( "請(qǐng)輸入表達(dá)式: " );gets( sin ); if( 8 ) /* 轉(zhuǎn)換成功 */printf( "后綴表達(dá)式為:%sn", sout );switch( 9 ) case 0:printf( "計(jì)算結(jié)果為: %dn", i );break;case -1:printf( "表達(dá)式錯(cuò)誤n" );break;case -2:printf

44、( "棧操作錯(cuò)誤n" );break; 實(shí)驗(yàn)4 隊(duì)列的基本操作四、參考程序程序1:題1 鏈接隊(duì)列的基本操作函數(shù)#include<stdio.h>#include<alloc.h>typedef struct queue /* 定義隊(duì)列結(jié)構(gòu) */int data;/* 隊(duì)列元素類型為int */struct queue *link;QUEUE;void EnQueue( QUEUE *head, QUEUE *tail, int x )/* 進(jìn)隊(duì)操作 */QUEUE *p;p = (QUEUE *)malloc( sizeof(QUEUE) ); 1

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

46、 /* 隊(duì)首為空,隊(duì)尾也為空 */*tail = NULL;free( p );/* 釋放單元 */ return 0;void OutputQueue( QUEUE *head )/* 輸出隊(duì)列中元素 */while 4 () printf( "%d ", head->data );head = head->link; printf( "n" );程序2:題2 主程序:void main()QUEUE *head, *tail;int op, i;head = tail = NULL;/* 1 */ while( 1 )printf( &q

47、uot;請(qǐng)選擇操作,1:進(jìn)隊(duì) 2:出隊(duì) 0:退出 " );fflush( stdin );/* 清空標(biāo)準(zhǔn)輸入緩沖區(qū) */scanf( "%d", &op );switch( op ) case 0:/* 退出 */return;case 1:/* 進(jìn)隊(duì) */printf( "請(qǐng)輸入進(jìn)隊(duì)元素:" ); scanf( "%d", &i ); 2 ;printf( "隊(duì)內(nèi)元素為:n" );OutputQueue( head );break;case 2:/* 出隊(duì) */if( 3 = 0 ) /* 出隊(duì)成功 */printf( "出隊(duì)元素為: %d , 隊(duì)內(nèi)元素為:n" , i );OutputQueue( head );elseprintf( "隊(duì)空n" );break;程序3:題3 環(huán)型隊(duì)列的基本操作函數(shù)#include<stdio.h>#include<alloc.h>#define MAXN 11/* 定義環(huán)行順序隊(duì)列的存儲(chǔ)長(zhǎng)度 */int EnQueue( int *q

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論