//mian函数
#include "QUEUE.h"
#include "STACK.h"
#define _CRT_SECURE_NO_WARNINGS 0
void main()
{
//3-22,队列
SeqCQueue name;
char item;
DataType x;
FILE *fp;
if ((fp = fopen("name.dat", "r+")) == NULL)
{
printf("不能打开文件name.dat!");
exit(0);
}
QueueInitiate(&name);//初始化
while (!feof(fp))
{
fscanf(fp, "%c", &item);
QueueAppend(&name, (int)item);//进队列
}
printf("出队列为:");
while (QueueDelete(&name, &x))
{
if (name.rear == name.front)
break;
item = (char)x;
printf("%c", item);
}
printf("\n");
//实验题目2
SeqStack number;
if ((fp = fopen("number.txt", "r+")) == NULL)
{
printf("不能打开文件name.dat!");
exit(0);
}
StackInitiate(&number);
fscanf(fp, "%d", &x);
exchange(&number, x);
}
//QUEUE.h
#pragma once
#include
#include
#define MaxQueueSize 1000
#define DataType int
//顺序队列,少用一个存储单元来判空跟满
typedef struct
{
DataType queue[MaxQueueSize];
int rear; //对尾指针
int front; //对头指针
}SeqCQueue;
//1.初始化
/*
1.对尾置0
2.对头置0
*/
//无返回值
void QueueInitiate(SeqCQueue *Q)
{
Q->rear = 0;
Q->front = 0;
}
//2.非空否
/*
1.若rear==front,队满
*/
//空返回0;非空返回1;
int QueueNotEmpty(SeqCQueue Q)
{
if (Q.rear == Q.front)
return 0;
else
return 1;
}
//3.入队列
/*
1.排除队满
2.将x插入队尾
3.对尾指示器加1
*/
//成功返回1;失败返回0;
int QueueAppend(SeqCQueue *Q, DataType x)
{
if ((Q->rear + 1) % MaxQueueSize == Q->front)
{
printf("队列已满无法插入!");
return 0;
}
else
{
Q->queue[Q->rear] = x;
Q->rear = (Q->rear + 1) % MaxQueueSize;//对尾指示器加1
return 1;
}
}
//4.出队列
/*
1.排除队空
2.取出队头元素
3.队头指示器加1
*/
//成功返回1;失败返回0;
int QueueDelete(SeqCQueue *Q, DataType *d)
{
if (Q->rear == Q->front)
{
printf("队列已空无数据元素出队列!\n!");
return 0;
}
else
{
*d = Q->queue[Q->front];
Q->front = (Q->front + 1) % MaxQueueSize;//队头指示器加1
return 1;
}
}
//STACK.h
#pragma once
#include
#include
#define DataType int
#define MaxStackSize 1000
typedef struct
{
DataType stack[MaxStackSize];
int top;
}SeqStack;
//1.初始化
void StackInitiate(SeqStack *s)
{
s->top = 0;
}
//2.非空否
int StackNotEmpty(SeqStack s)
{
if (s.top <= 0)
return 0;
else
return 1;
}
//3.入栈
int StackPush(SeqStack *s, DataType x)
{
if (s->top >= MaxStackSize)
{
printf("堆栈已满无法插入!");
return 0;
}
else
{
s->stack[s->top] = x;
s->top++;
return 1;
}
}
//4.出栈
int StackPop(SeqStack *s, DataType *d)
{
if (s->top <= 0)
{
printf("堆栈已空无数据元素出栈!");
return 0;
}
else
{
s->top--;
*d = s->stack[s->top];
return 1;
}
}
//5.取栈顶数据元素
int StackTop(SeqStack s, DataType *d)
{
if (s.top <= 0)
{
printf("堆栈已空!");
return 0;
}
else
{
*d = s.stack[s.top - 1];
return 1;
}
}
//6.10进制转为2进制
/*
1.该数对2整除,若商为0结束while循环
2.该数对2求余
3.进栈
4.结束后出栈
*/
//没返回值
void exchange(SeqStack *d, int item)
{
int flag = 0;
while (item != 0)
{
flag = item % 2;
StackPush(d, flag);
item = item / 2;
}
printf("转为二进制为:");
while (d->top != 0)
{
StackPop(d, &flag);
printf("%d", flag);
}
}