【FROM:INTERNET 百科 && 维基百科】
进栈(PUSH)算法:
①若TOP≥n时,则给出溢出信息,作出错处理(push前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
DEMO:FROM 百科
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 1024
/*define struct*/
typedef struct
{
int data[MAXSIZE];
int top;
}SeqStack;
/*init struct*/
SeqStack *Init_SeqStack()
{
SeqStack *s;
s=(SeqStack *)malloc(sizeof(SeqStack));
if (!s)
{
printf("空间不足\n");
return NULL;
}
else
{
s->top=-1;
return s;
}
}
/*if stack is empty */
int Empty_SeqStack(SeqStack *s)
{
if (s->top == -1)
{
return 1;
}
else
{
return 0;
}
}
/*push operator*/
int Push_SeqStack(SeqStack *s,int x)
{
if (s->top == MAXSIZE-1)
{
printf("Stack Full\n");
return 0;
}
else
{
s->top++;
s->data[s->top]=x;
return 1;
}
}
/*pop operator*/
int Pop_SeqStack(SeqStack *s,int *x)
{
if (Empty_SeqStack(s))
{
printf("Stack Empty \n");
return 0;
}
else
{
*x=s->data[s->top]; //top element into *x
s->top--;
return 1;
}
}
/*Get top element*/
int Top_SeqStack(SeqStack *s)
{
if (Empty_SeqStack(s))
{
printf("Stack Empty \n");
return 0;
}
else
{
return s->data[s->top];
}
}
/*print SeqStack*/
int Print_SeqStack(SeqStack *s)
{
int i;
printf("当前栈中的元素:\n");
for (i=s->top;i>=0;i--)
{
printf("%3d",s->data[i]);
}
printf("\n");
return 0;
}
int main(void)
{
SeqStack *L;
int n; //入栈元素个数
int element_value;
int m;
int i;
L=Init_SeqStack();
printf("STACK初始化完成\n");
printf("栈空:%d\n",Empty_SeqStack(L));
printf("请输入入栈元素个数:\n");
scanf("%d",&n);
printf("请输入要入栈的%d个元素:\n",n);
for(i=0;i<n;i++)
{
scanf("%d",&element_value);
Push_SeqStack(L,element_value);
}
Print_SeqStack(L);
printf("栈顶元素:%d\n",Top_SeqStack(L));
printf("\n============================================\n");
printf("请输入要出栈的元素个数(不能超过%d个):\n",n);
scanf("%d",&n);
printf("依次出栈的%d个元素:\n",n);
for(i=0;i<n;i++)
{
Pop_SeqStack(L,&m);
printf("%3d",m);
}
printf("\n");
Print_SeqStack(L);
printf("栈顶元素:%d\n",Top_SeqStack(L));
getch();
return 0;
}
DEMO:push operator && pop operator
FROM:维基百科
typedef struct
{
size_t size;
int array[STACK_MAXSIZE];
}STACK;
void push(STACK *ps,int x)
{
if (ps->SIZE == STACK_MAXSIZE)
{
fputs("overflow\n",stderr);
abort();
}
else
{
ps->array[ps->size++]=x;
}
}
int pop(STACK *ps)
{
if (ps->size ==0)
{
fputs("underflow\n",stderr);
abort();
}
else
{
return ps->array[--ps->size] ;
}
}