实验3 栈的基本操作
一、实验目的
熟练应用顺序表和单链表存储结构,实现栈的初始化、入栈、出栈等基本操作。
二、实验软硬件要求
硬件:一台安装了windows操作系统的计算机。
软件:C语言编程工具
- 实验内容(需写出源程序)
- 利用栈的基本操作实现将一个键盘输入的十进制整数转换为对应的八进制数。
v#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Boolean;
typedef int SElemType;
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
//顺序栈
struct SqStack
{
SElemType *base;
SElemType *top;
int stacksize;
};
//构造一个空栈S
Status InitStack(SqStack &S)
{
S.base = (int*)malloc(STACK_INIT_SIZE*sizeof(int));
if (!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
//检查s栈是否为空栈
Boolean StackEmpty(SqStack S)
{
if (S.top == S.base)
return TRUE;
else
return FALSE;
}
//插入元素e为新的栈顶元素
Status Push(SqStack &S,int e)
{
if (S.top-S.base >= S.stacksize) //栈满,追加存储空间
{
S.base = (SElemType*)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));
if (!S.base)
exit (OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACK_INCREMENT;
}
*(S.top)++=e;
return OK;
}
//若栈不为空,删除S的栈顶元素,用e返回其值
Status Pop(SqStack &S,int &e)
{
if (S.top == S.base)
return ERROR;
e = *--S.top;
return OK;
}
// 对于输入的非负十进制整数,打印输出与其等值的八进制数
void conversion(SqStack S)
{
int N,e;
InitStack(S);
printf("请输入一个十进制整数:");
scanf("%d",&N);
while(N){
Push(S,N%8);
N=N/8;
}
printf("转为八进制:");
while(!StackEmpty(S)){
Pop(S,e);
printf("%d",e);
}
printf("\n");
}
主函数
int main()
{
SqStack S;
conversion(S);
}
结果
我的其他专栏:
关注我了解更多