首页 考试资料幻灯片工程技术公务员考试小学教学中学教学大学教学外语资料
数据结构实验书


if(!Q.base) exit(OVERFLOW);//存储分配失败 Q.front=Q.rear=0; return } Status QueueEmpty(SqQueue Q){ OK;

//若队列 Q 为空队列,则返回 TRUE,否则返回 FALSE if(Q.front﹦﹦Q.rear) return else } int QueueLength(SqQueue Q){ return FALSE; TRUE;

//返回 Q 的元素个数,即为队列的长度 return(Q.rear-Q.front+MaxQsize)% } Status GetHead(SqQueue Q,QelemType &e){ MaxQsize;

//若队列不为空,则用 e 返回 Q 的队头元素,并返回 OK;否则返回 ERROR if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; return } Status EnQueue(SqQueue &Q,QelemType e){ OK;

//插入元素 e 为 Q 的新的队尾元素 if((Q.rear+1)%MaxQsize==Q.front) Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MaxQsize; return } Status DeQueue(SqQueue &Q,QelemType &e){ OK; return ERROR;//队列满

//若队列不空,则删除 Q 的队头元素,用 e 返回其值,并返回 OK,否则返回 ERROR

if(Q.rear==Q.front) e=Q.base[Q.front];

return ERROR;//队列空

Q.front=(Q.front+1)%MaxQsize; return } 【C 源程序】 #include #include typedef <stdio.h> <stdlib.h> int QElemType; Status; 1 OK;

typedef int #define OK

#define TRUE 1 #define FALSE #define ERROR 0 0

#define OVERFLOW -2 #define MaxQsize 100 typedef struct { QElemType *base; int front; int rear; }SqQueue; Status InitQueue(SqQueue *Q){ /*初始化的动态分配存储空间*/ /*头指针,若队列不空,指向队列头元素*/ /*最大队列长度*/

/*尾指针,若队列不空,指向队列尾元素的下一个位置*/

/*构造一个空队列 Q*/ (*Q).base=(QElemType if(!(*Q).base) *)malloc(MaxQsize*sizeof(QElemType));

return(OVERFLOW);/*存储分配失败*/

(*Q).front=(*Q).rear=0; return } Status QueueEmpty(SqQueue Q){ OK;

/*若队列 Q 为空队列,则返回 TRUE,否则返回 FALSE*/

if(Q.front==Q.rear) else } return FALSE;

return TRUE;

int QueueLength(SqQueue

Q){

/*返回 Q 的元素个数,即为队列的长度*/ return(Q.rear-Q.front+MaxQsize)% } Status GetHead(SqQueue Q,QElemType *e){ MaxQsize;

/*若队列不为空,则用 e 返回 Q 的队头元素,并返回 OK;否则返回 ERROR*/ if(Q.front==Q.rear) *e=Q.base[Q.front]; return } Status EnQueue(SqQueue *Q,QElemType e){ OK; return ERROR;

/*插入元素 e 为 Q 的新的队尾元素*/ if(((*Q).rear+1)%MaxQsize==(*Q).front) (*Q).base[(*Q).rear]=e; (*Q).rear=((*Q).rear+1)%MaxQsize; return } Status DeQueue(SqQueue *Q,QElemType *e){ OK; return ERROR;/*队列满*/

/*若队列不空,则删除 Q 的队头元素,用 e 返回其值,并返回 OK,否则返回 ERROR*/ if((*Q).rear==(*Q).front) *e=(*Q).base[(*Q).front]; (*Q).front=((*Q).front+1)%MaxQsize; return } main(){ SqQueue int Q; select; OK; return ERROR;/*队列空*/

QElemType if

e;

(InitQueue(&Q)==OVERFLOW) printf("分配失败,即将退出程序!");

else/*否则显示队列操作的菜单,并选择相应的基本操作*/ do { printf("1:判断队列是否为空n"); printf("2:测试队列的长度n" ); printf("3:取队头元素值n"); printf("4:向队列中插入一新元素n"); printf("5:删除队列中一元素n"); printf("0:结束n"); scanf("%d",&select); switch (select) case 1: if (QueueEmpty(Q)==TRUE) { printf("队列为空n"); else case 2: printf("队列不为空n");break;

printf("队列长度为:%dn",QueueLength(Q));break; printf("队列为空n"); else printf("队首元素为:%dn",e);break;

case 3: if(GetHead(Q,&e)==ERROR)

case 4: scanf("%d",&e); if(EnQueue(&Q,e)==ERROR) printf("队列满n");

else printf("元素成功插入n");break; case 5: if(DeQueue(&Q,&e)==ERROR) printf("队列空,无数据可删n");

else printf("删除元素为:%dn",e);break; case 0: printf("操作结束n");break; default:printf("输入选择出错!n"); }/*switch*/ }while }/*main_end*/ 【测试数据】 读者根据运行提示和显示的功能菜单实现循环队列的基本操作。 (select);

【说明】 此题是使用动态顺序存储方式来存放循环队列。特别注意循环队列中队空和队满的判断条件。 【实验题】 请用链式存储方式表示队列,并实现队列的基本操作。

第三节 计算表达式的值
【问题描述】 计算用运算符后缀法表示的表达式的值。后缀表达式也称逆波兰表达式,比中缀表达式计算起来更方便简 单些,中缀表达式要计算就存在着括号的匹配问题,所以在计算表达式值时一般都是先转换成后缀表达式, 再用后缀法计算表达式的值。 如: 表达式(a+b*c)/d-e 用后缀法表示应为 abc*+d/e-。 只考虑四则算术运算, 且假设输入的操作数均为 1 位十进制数(0—9),并且输入的后缀形式表达式不含语法错误。 【数据描述】 #define add 43 /*运算符加号‘+’的 ASCII 码*/ /*运算符减号‘-’的 ASCII 码*/

#define subs 45

#define mult 42 /*运算符乘号‘*’的 ASCII 码*/ #define div 47 /*运算符除号‘/’的 ASCII 码*/ 100

#define MAXSIZE typedef struct{ { int

stkdata[MAXSIZE];//用数组来表示栈空间,定义长度为 MAXSIZE 的栈 //栈顶指针

int top; }STKzone; typedef STKzone

*STK; bool;

typedef enum{true=1,false=0} typedef enum{ok,error}

status;

【算法描述】 用流程图表示见图 3-4。

【C 源程序】

#include<stdio.h> #define add 43 /*运算符加号‘+’的 ASCII 码*/ /*运算符减号‘-’的 ASCII 码*/ /*运算符乘号‘*’的 ASCII 码*/ /*运算符除号‘/’的 ASCII 码*/ 100

123456789101112131415161718192021222324252627282930

 


 

  【Top

最新搜索

 


 

热点推荐