zl程序教程

您现在的位置是:首页 >  工具

当前栏目

顺序栈(Visual Studio实现)

VisualStudio 实现 顺序
2023-06-13 09:15:16 时间

顺序栈(Visual Studio开发环境)

一、栈的顺序存储结构

利用顺序存储方式实现的栈称为顺序栈。类似于顺序表的定义,栈中的数据元素用一个预设的足够长度的一维数组来实现:datatype data[MAXSIZE],栈底位置可以设置在数组的任一个断点,而栈顶是随着插入和删除而变化的,用一个 int top来作为栈顶的指针,指明当前栈顶的位置,同样将data和top封装在一个结构中 通常将0下标端设为栈底,这样空栈时栈顶指针为-1,入栈时,栈顶指针加1,即s->top++,出栈时,栈顶指针减1,即s->top–.

二、代码实现

stack.h头文件

#pragma once
# define MAXSIZE 100
typedef int datatype;
typedef struct
{
	datatype data[MAXSIZE];
	int top;   //栈顶指针
}SeqStack;
//置空栈
SeqStack *Init_SeqStack()
{
	SeqStack *s;
	s =(SeqStack *) malloc(sizeof(SeqStack));
	s->top = -1;
	return s;
}
//判空
int Empty_SeqStack(SeqStack *s)
{
	if (s->top == -1) {
		return 1;
	}
	else {
		return 0;
	}
}
//入栈
int Push_SeqStack(SeqStack *s, datatype x) {
	if (s->top == MAXSIZE - 1) {//栈满不能入栈
		return 0;
	}
	else {
		s->top++;
		s->data[s->top] = x;
		return 1;
	}
}
//出栈
int Pop_SeqStack(SeqStack *s, datatype *x) {
	if (Empty_SeqStack(s)) {
		return 0;//栈空不能出栈
	}else {
		*x = s->data[s->top];
		s->top--;
		return 1;
	}
}
//取栈顶元素
datatype Top_SeqStack(SeqStack *s) {
	if (Empty_SeqStack(s)) {//栈空
		return 0;
	}
	else {
		return (s->data[s->top]);
	}
}

源文件:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include "stack.h"
int main() {
	SeqStack *stack1;
	int x,x1;
	stack1 = Init_SeqStack();
	//入栈10个元素
	for (int i = 0; i < 10; i++) {
		Push_SeqStack(stack1, i + 1);
	}
	x1 = Top_SeqStack(stack1);
	printf("栈顶的数据元素为:%d\n", x1);
	//全部出栈的顺序
	while (!Empty_SeqStack(stack1)) {
		Pop_SeqStack(stack1, &x);
		printf("%d ", x);
	}
	system("pause");
	return 0;
}

三、运行结果