【数据结构实验二】顺序栈的建立、入栈和出栈

版权声明:本文为King_HAW原创文章,未经King_HAW允许不得转载。 https://blog.csdn.net/King_HAW/article/details/68941358

版权申明:

本实验的实验目的,实验内容,实验要求归东北大学所有,未经许可禁止转载。


实验二 顺序栈的建立、入栈和出栈

实验目的

掌握栈的创建、入栈和出栈操作;理解顺序栈在入栈和出栈时对Top指针的移动。

实验内容

1. 通过结构体声明线性栈;

2. 在初始化操作中,对栈分配存储空间,如可容纳100个元素;

3. 编写入栈、出栈、栈空判断(可选)操作;

4. 编写函数,利用栈将10进制的数转换为8进制的数;

5. 在主函数中对栈进行测试:

声明一个新栈,初始化后。

(1)输入2,4,6,… …,98,100等50个元素,然后退栈输出所有元素。

(2)将10进制数5678转化为8进制数并输出。


源码:

#include "stdafx.h"
#include <iostream>

using namespace std;

#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10

typedef int SElemType;
typedef int Status;

typedef struct{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;

Status InitStack(SqStack &S){
	S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
	if(!S.base) exit(OVERFLOW);
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	return OK;
}

Status StackEmpty(SqStack S){
    if(S.top == S.base)
    return OK;
}

Status Push(SqStack &S, SElemType e){
	if(S.top - S.base >= S.stacksize){
		S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
		if(!S.base) exit(OVERFLOW);
		S.top = S.base + S.stacksize;
		S.stacksize += STACKINCREMENT;
	}
	*S.top++ = e;
	// *S.top = e;
	// S.top++;
	return OK;
}
Status Pop(SqStack &S, SElemType &e){
	if(S.top == S.base) return ERROR;
	e = * --S.top;
	return OK;
}

void conversion(){
    int j, e;
    SqStack S;
    InitStack(S);
    scanf("%d", &j);
    while(j){
        Push(S, j % 8);
        j = j / 8;
    }
    while(StackEmpty(S) != OK){
        Pop(S, e);
        printf("%d", e);
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
	int i;
	int e;
	SqStack S;
	InitStack(S);
	for(i = 1; i < 51; i++){
		Push(S, i * 2);
	}
	cout << "Decimal representation:" << endl;
	for(i = 0; i < 50; i++){
		Pop(S, e);
		cout << e << " ";
		if(i % 10 == 9)
			cout << endl;
	}
	cout << endl;
	cout << "Octal representation:" << endl;
	conversion();
	getchar();
	return 0;
}
这是数据结构的第二个实验,主要涉及到了栈的构造构造及应用,注意一下代码中注释的地方,这边的*S.top++ = e;等于*S.top = e;S.top++;这是Push的关键。同时注意一下malloc和realloc的用法。


运行结果:


猜你喜欢

转载自blog.csdn.net/King_HAW/article/details/68941358