栈
栈 -------------->先进后出
记住这点就行了。
最开始想过用栈顶指针来进行控制,通过地址的递增或者递减来实现入栈和出栈。但是低地址是栈顶还是高地址是栈顶这点无法确定。所以还是使用栈中的变量数量模拟来判定位置的。
源码:
#include "stdio.h"
#include "stdlib.h"
#define STACK_SPACE 10
typedef struct Stack_list
{
int * Stack_Space;//栈空间
int Stack_top; //栈顶
int Stack_bottom;//栈底
}*pStack;
void Stack_creat(pStack * S);
void Stack_push(pStack S);
void Stack_out(pStack S);
void Stack_pri(pStack S);
int main(void)
{
pStack s;
int dp;
char ch,bh;
Stack_creat(&s);
while(1)
{
Stack_push(s);
printf("是否继续压入 Y N\n");
scanf("%c",&ch);
if(ch=='Y')
continue;
else
break;
}
getchar();
while(1)
{
Stack_out(s);
printf("是否继续弹出 Y N\n");
scanf("%c",&bh);
if(bh=='Y')
continue;
else
break;
}
Stack_pri(s);
return 0;
}
void Stack_creat(pStack * S)
{
(*S)->Stack_Space=(int *)malloc(STACK_SPACE*sizeof(int));
if((*S)->Stack_Space==NULL)
{
printf("error malloc\n");
}
(*S)->Stack_top=(*S)->Stack_bottom=0;
}
void Stack_push(pStack S)
{
int num;
printf("请输入要入栈的元素\n");
scanf("%d", &num);
getchar();
S->Stack_Space[S->Stack_top]=num;
if(S->Stack_top==STACK_SPACE)
{
printf("栈区已满了,不可再压入\n");
return;
}
S->Stack_top++;
}
void Stack_out(pStack S)
{
int data;
if(S->Stack_top==S->Stack_bottom)
{
printf("stack full\n");
return;
}
else
{
data=S->Stack_Space[S->Stack_top-1];
printf("%d 已出栈\n",data);
S->Stack_top--;
}
}
void Stack_pri(pStack S)
{
while(S->Stack_top!=S->Stack_bottom)
{
printf("%d\n",S->Stack_Space[S->Stack_top-1]);
S->Stack_top--;
}
}
运行结果:
基本模块功能都写了,具体流程随便写了点,需要的可自行修改。
感谢阅读!