本文是以c语言的风格编写的c++程序。
栈的特点:先进后出,后进先出。
顺序栈的结构定义:一个数组以及一个”指针“(不是真正的指针,而是位置变化的说明)
#include<stdio.h>
#include<malloc.h>
#define Maxsize 20
typedef struct
{
int data[Maxsize];
int top;
}SqStack;
初始化顺序栈:仍然是用malloc开辟一片固定大小的空间,并将top置于-1
void InitSqStack(SqStack*& S)
{
S = (SqStack*)malloc(sizeof(SqStack));
S->top = -1;
}
从栈底到栈顶依次输出元素
void DispSqStack(SqStack* S)
{
if (S->top > -1)
{
int t = S->top;
for (int i = 0; i < t + 1; i++)
{
printf("%d ", S->data[i]);
}
printf("\n");
}
else
{
printf("这是空的!\n");
}
}
销毁顺序栈,仍然是free()
void DestroySqStack(SqStack*& S)
{
free(S);
}
查看顺序栈是否为空,即top是否为-1
bool EmptySqStack(SqStack*& S)
{
return S->top == -1;
}
进栈,若栈满则返回假
bool Push(SqStack*& S, int n)
{
if (S->top == Maxsize - 1)
{
return false;
}
else
{
S->data[S->top + 1] = n;
S->top++;
return true;
}
}
出栈,若栈为空则返回假
bool Pull(SqStack*& S, int& n)
{
if (S->top == -1)
{
return false;
}
else
{
n = S->data[S->top + 1];
S->top--;
}
}
由栈底到栈顶查找某个位置对应的元素
void GetSqStack(SqStack* S, int n)
{
if (n >= 0 && n <= S->top + 1)
{
printf("第%d个元素值为%d。\n",n,S->data[n-1]);
}
else {
printf("索引不合法。\n");
}
}
最后在main()函数上实现
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,9,10 };
SqStack* S;
InitSqStack(S);
CreateSqStack(S, a, 10);DispSqStack(S);
int a1 = 100;
Push(S, a1);printf("元素%d进栈:",a1);
DispSqStack(S);
int e = 0; printf("最后一个元素出栈:");
Pull(S, e); DispSqStack(S);
GetSqStack(S, 4);
DestroySqStack(S);
return 0;
}
标签:顺序,return,SqStack,int,top,c++,printf,数据结构,data
From: https://blog.csdn.net/2301_78564545/article/details/139870293