<pre name="code" class="cpp">[cpp] 简单双端栈的应用
源文件部分:
#include <stdio.h>
#define MaxStackSize 100
typedef int DataType;
int len,x;
#include"SeqStack.h"
int main()
{
SeqStack myStack;
int i,n,m;
StackInitiate(&myStack);
for(i=0;i<10;i++)
StackPush(&myStack,i+1,1);
StackPrint(myStack,1);
StackPrint(myStack,2);
printf("请输入你要插入的元素以及要插入的几号栈:\n");
scanf("%d%d",&n,&m);
StackPush(&myStack,n,m);
printf("插入后得到如下序列:\n");
StackPrint(myStack,1);
StackPrint(myStack,2);
StackPop(&myStack,&x,m);
StackTop(myStack,&x,m);
printf("删除后得到如下序列:\n");
StackPrint(myStack,1);
StackPrint(myStack,2);
return 0;
}
头文件部分:
typedef struct
{
DataType stack[MaxStackSize]; //栈的申明定义
int top1;
int top2;
}SeqStack;
void StackInitiate(SeqStack *S) //栈的初始化操作
{
S->top1=0; //不舍弃数组的存储单元 ---第二种方法
S->top2=MaxStackSize-1;
}
int StackNotEmpty(SeqStack S,DataType where) //判空
{
if(where==1)
{
if(S.top1<=0) //判空
return 0;
return 1;
}
else
{
if(S.top2>=MaxStackSize-1)
return 0;
return 1; //不符合就未空
}
}
int StackPush(SeqStack *S,DataType x,DataType where) //入栈
{
if(S->top1+1==S->top2) //判满
{
printf("堆栈已满无法插入!\n");
return 0;
}
else //未满则进行插入操作
{
if(where==1)
{
S->stack[S->top1]=x;
S->top1++;
}
else //选择插入的栈号进行插入操作
{
S->stack[S->top2]=x;
S->top2--;
}
}
return 1;
}
int StackPop(SeqStack *S,DataType *d,DataType where) //出栈
{
if(where==1)
{
if(S->top1<=0)
{
printf("1号栈是空的,无数据元素出栈!\n");
return 0;
}
S->top1--;
*d=S->stack[S->top1];
}
else
{
if(S->top2>=MaxStackSize-1)
{
printf("2号栈是空的,无数据元素出栈!\n");
return 0;
}
S->top2++;
*d=S->stack[S->top2];
}
return 1;
}
int StackTop(SeqStack S,DataType *d,DataType where) //返回栈顶元素
{
if(where==1)
{
if(len<=0)
{
printf("1号栈已空无数据元素出栈!\n");
return 0;
}
*d=S.stack[len-1];
}
else
{
if(len>MaxStackSize-1)
{
printf("2号栈已空无数据元素出栈!\n");
return 0;
}
*d=S.stack[len+1];
}
return 1;
} //使用时忘记保存头文件代码会造成什么错误
void StackPrint(SeqStack S,DataType where) //打印函数
{
if(where==1)
{
len=S.top1;
if(len<=0)
{
printf("1号栈已空,无元素输出.\n");
return ;
}
printf("1号栈内元素如下:\n");
while(len>0)
{
StackTop(S,&x,1);
printf("%d ",x);
len--;
}
printf("\n");
return ;
}
else
{
len=S.top2;
if(len>=MaxStackSize-1)
{
printf("2号栈已空无数据元素出栈!\n");
return ;
}
printf("2号栈内元素如下:\n");
while(len<MaxStackSize-1)
{
StackTop(S,&x,2);
printf("%d ",x);
len++;
}
printf("\n");
return ;
}
return ;
}
从两端生长的双向栈-C语言版
最新推荐文章于 2021-12-03 11:12:16 发布