顺序栈(Visual Studio开发环境)
一、栈的顺序存储结构
利用顺序存储方式实现的栈称为顺序栈。类似于顺序表的定义,栈中的数据元素用一个预设的足够长度的一维数组来实现:datatype data[MAXSIZE],栈底位置可以设置在数组的任一个断点,而栈顶是随着插入和删除而变化的,用一个 int top来作为栈顶的指针,指明当前栈顶的位置,同样将data和top封装在一个结构中 通常将0下标端设为栈底,这样空栈时栈顶指针为-1,入栈时,栈顶指针加1,即s->top ,出栈时,栈顶指针减1,即s->top–.
二、代码实现
stack.h头文件
代码语言:javascript复制#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]);
}
}
源文件:
代码语言:javascript复制#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("栈顶的数据元素为:%dn", x1);
//全部出栈的顺序
while (!Empty_SeqStack(stack1)) {
Pop_SeqStack(stack1, &x);
printf("%d ", x);
}
system("pause");
return 0;
}