顺序栈
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 5
typedef int Elem;
typedef struct{
Elem data[Maxsize];
int top;
} SqStack;
typedef SqStack * Stack;
int InitStack(Stack s)
{
s->top = -1;
return 1;
}
int StackPush(Stack s,Elem num)
{
if(s->top == Maxsize - 1)
{
printf("栈满!");
return 0;
}
s->top++;
s->data[s->top] = num;
}
int StackPop(Stack s, Elem *num)
{
if(s->top == -1)
{
printf("栈空!");
return 0;
}
*num = s->data[s->top];
s->top--;
printf("%3d",*num);
}
int main()
{
Stack head = (Stack)malloc(sizeof(SqStack));
int i;
int e;
InitStack(head);
for(i = 0; i < Maxsize; i++)
{
StackPush(head,i);
}
for(i = 0; i < Maxsize; i++)
{
StackPop(head,&e);//此处传&e 与值传递和地址传递有关,若是值传递,则在函数调用后会立即释放
}
printf("\n");
return 0;
}
链栈
#include <stdio.h>
#include <stdlib.h>
typedef struct Stacknode //栈结点
{
int data;
struct StackNode *next;
}*StackNode;
typedef struct Stacklist //链表结构
{
StackNode top;
int count;
}StackList;
int InitStack(StackList *s)//初始化
{
s->top = NULL;//头指针即栈顶,置空
return 1;
}
int ListStackPush(StackList *s,int num)//入栈
{
StackNode pnew = (StackNode)malloc(sizeof(struct Stacknode));//生成一个新的结点
pnew->data = num;
pnew->next = s->top;
s->top = pnew;
s->count++;
printf("%3d",num);
}
int ListStackPop(StackList *s,int *num)
{
StackNode p;
if(s->top == NULL)
{
printf("栈空!\n");
return 0;
}
*num = s->top->data;
p = s->top;
s->top = s->top->next;
free(p);
s->count--;
printf("%3d",*num);
}
int main()
{
StackList *head = (StackList*)malloc(sizeof(struct Stacklist));//链式结构的头指针
int i;
int e;
InitStack(head);
for(i = 0; i < 5; i++)
{
ListStackPush(head,i);
}
printf("\n");
for(i = 0; i < 5; i++)
{
ListStackPop(head,&e);//此处传&e 与值传递和地址传递有关,若是值传递,则在函数调用后会立即释放
}
printf("\n");
return 0;
}