数据结构实验报告二

1. 采用顺序栈完成进制转换

(1)定义顺序栈的存储结构;
(2)实现顺序栈的初始化、判断是否为空、进栈、出栈等基本操作;
(3)调用顺序栈的基本操作实现进制转换。

//采用顺序栈完成进制转换
//(1)定义顺序栈的存储结构;
//(2)实现顺序栈的初始化、判断是否为空、进栈、出栈等基本操作;
//(3)调用顺序栈的基本操作实现进制转换。
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50

typedef struct {
	int data[MaxSize];
	int top;
}SqStack;
//初始化 
void InitStack(SqStack *&s){
	s=(SqStack *)malloc(sizeof(SqStack));
	s->top=-1;
}
//判断是否为空
bool StackEmpty(SqStack *s){
	return(s->top==-1);
} 
//进栈
bool Push(SqStack *&s,int e){
	if(s->top==MaxSize-1) {
		return false;
	}
	s->top++;
	s->data[s->top]=e;
	return true;
}
//出栈
bool Pop(SqStack *&s,int &e){
	if(s->top==-1) return false;
	e=s->data[s->top];
	s->top--;
	return true;
} 
//进制转换 
void conversion(int n,int m){
	SqStack *s;
	InitStack(s);
	int b;
	printf("%d用%d进制表示为:",m, n);
	while (m) {
		Push(s, m%n) ;
		m = m / n;
	}
	while (!StackEmpty(s)) {
		Pop(s, b);
		
		printf("%d", b);
	}
	 
} 
int main(){
	int m,n;
	printf("请输入要转换的十进制数字:"); 
	scanf("%d",&m);
	printf("请输入要转换的进制:") ;
	scanf("%d",&n); 
	conversion(n,m);
	return 0;
}

2. 采用循环队列或链队列实现病人看病的模拟程序

(1)定义队列的存储结构;
(2)实现队列的初始化、判断是否为空、入队、出队等基本操作;
(3)调用队列的基本操作实现病人看病模拟程序包括排队、就诊、查询、退出等功能;

// 采用循环队列或链队列实现病人看病的模拟程序
//(1)定义队列的存储结构;
//(2)实现队列的初始化、判断是否为空、入队、出队等基本操作;
//(3)调用队列的基本操作实现病人看病模拟程序包括排队、就诊、查询、退出等功能

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50

typedef struct {
	char data[];
	int front,rear;
}SqQueue;
//初始化 
void InitQueue(SqQueue *&q){
	q=(SqQueue *)malloc(sizeof(SqQueue));
	q->front=q->rear=0;
}
//判空 
bool QueueEmpty(SqQueue *q){
	return(q->front==q->rear);
}
//入队 
bool enQueue(SqQueue *&q,char e){
	if((q->rear+1)%MaxSize==q->front){
		return false;
	}
	q->rear=(q->rear+1)%MaxSize;
	q->data[q->rear]=e;
	return true;
}
//出队 
bool deQueue(SqQueue *&q,char &e){
	if(q->front==q->rear){
		return false;
	}
	q->front=(q->front)%MaxSize;
	e=q->data[q->front];
	return true;
}
//选择菜单
int Menu_select(){
    int s;
    while(true) {
        scanf("%d",&s);
        if(s<0||s>5)
            printf("\n\t 输入错误,请重新输入!\n");
        else
            break;
    }
    return s;
} 
int main (){
	SqQueue *q;
	InitQueue(q);
	int people=0;
	char e; 
	printf("**********************************\n");
    printf("*     欢迎进入就医排队管理系统! *\n");
    printf("\n*\t请选择操作:             *\n");
    printf("*\t<1>:排队;                *\n");
    printf("*\t<2>:就诊;                *\n");
    printf("*\t<3>:查看排队情况;        *\n");
    printf("*\t<4>:退出运行;      *\n");
    printf("**********************************\n");
    while(true){
    	switch(Menu_select()){
    		case 1:
    			enQueue(q,'A');
    			people++;
    			printf("排队成功!"); 
    			break;
    		case 2:
    			deQueue(q,e);
    			people--;
    			printf("就诊成功!") ; 
    			break;
    		case 3:
    			printf("前面还有%d人",people-1);
    			break;
    		case 4:
    			printf("退出成功!"); 
    			break;	
		}
	}
} 
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值