顺序栈的操作
栈 (stack) 是限定仅在表尾进行插入或删除操作的线性表。
栈的结构
typedef struct node {
int *elem;//可以用指针,也可以用数组。
int top;//定义栈的结构
}Node;
初始化栈
bool InitStack(Node *l) {
if (l==NULL)
{
return false;
}
l->elem = (int *)malloc(sizeof(int));
l->top = -1;//初始化的时候将top值赋为-1;
return true;
}
进栈
void Push(Node *l) {
if (l->top==maxSize-1)
{
printf("\n栈满\n");
return;
}
printf("输入你要入栈的元素:");
int data;
scanf("%d", &data);
l->elem[++l->top] = data;//进栈从0开始
printf("\n进栈成功\n");
}
栈的长度
int Length(Node *l) {
if (l->top==-1)
{
return 0;//判断栈是否为空
}
return l->top + 1;//返回top+1;
}
出栈
void Pop(Node *l) {
while (l->top!=(-1))
{
printf("%d ", l->elem[l->top--]);//倒序出栈
}
printf("\n");
}
栈是否为空
bool IsEmpty(Node *l) {
if (l->top==-1)
{
return true;//根据top的值判断栈是否为空
}
return false;
}
代码测试
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#define maxSize 100
typedef struct node {
int *elem;
int top;//定义栈的结构
}Node;
bool InitStack(Node *l);//初始化栈
void Push(Node *l);//进栈
int Length(Node *l);//栈的长度
void Pop(Node *l);//出栈
bool IsEmpty(Node *l);//判断栈是否为空
int main() {
bool flag = true;
int choice;
Node *l = (Node*)malloc(sizeof(Node));
while (flag)
{
printf("\n=====栈的操作=====\n");
printf("1.初始化栈\n");
printf("2.入栈\n");
printf("3.栈的长度\n");
printf("4.依次出栈\n");
printf("5.判断栈是否为空\n");
printf("=====输入0退出=============\n");
printf("输入你的选择:");
scanf("%d", &choice);
switch (choice)
{
case 1:
if (InitStack(l))
{
printf("\n初始化成功\n");
}
else {
printf("\n初始化失败\n");
}
break;
case 2:
Push(l);
break;
case 3:
printf("\n栈的长度为:%d\n", Length(l));
break;
case 4:
Pop(l);
break;
case 5:
if (IsEmpty(l))
{
printf("\n栈为空\n");
}
else {
printf("\n栈不为空\n");
}
break;
default:
flag = false;
break;
}
}
}
bool InitStack(Node *l) {
if (l==NULL)
{
return false;
}
l->elem = (int *)malloc(sizeof(int));
l->top = -1;//初始化的时候将top值赋为-1;
return true;
}
void Push(Node *l) {
if (l->top==maxSize-1)
{
printf("\n栈满\n");
return;
}
printf("输入你要入栈的元素:");
int data;
scanf("%d", &data);
l->elem[++l->top] = data;//进栈从0开始
printf("\n进栈成功\n");
}
int Length(Node *l) {
if (l->top==-1)
{
return 0;//判断栈是否为空
}
return l->top + 1;//返回top+1;
}
void Pop(Node *l) {
while (l->top!=(-1))
{
printf("%d ", l->elem[l->top--]);//倒序出栈
}
printf("\n");
}
bool IsEmpty(Node *l) {
if (l->top==-1)
{
return true;//根据top的值判断栈是否为空
}
return false;
}