数组单向
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int data[10];
int top;
}stack;
void push(stack*p, int a);
void pop(stack* p);
int main(int argc, char const*argv[])
{
stack* p = (stack*)malloc(sizeof(stack));
p->top = -1;
push(p, 10);
pop(p);
void push(stack* p, int a)
{
//判断是否栈满
if (p->top==9)
{
printf("栈满了\n");
}
else
{
p->top++;
p->data[p->top] = a;
printf("%d已入栈\n", a);
}
}
void pop(stack* p)
{
//判断是否栈空
if (p->top==-1)
{
printf("栈空了\n");
}
else
{
printf("%d已出栈\n", p->data[p->top]);
p->top--;
}
}
数组双向
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int date[10];
int top1;
int top2;
}stack;
void push(stack*p, int a, int tag);
void pop(stack*p, int tag);
int main(int argc, char const* argv[])
{
stack* p = (stack*)malloc(sizeof(stack));
p->top1 = -1;
p->top2 = 10;
push(p, 9, 1);
pop(p, 2);
}
void push(stack* p, int a, int tag)
{
//判断栈满
if (p->top2-p->top1==1)
{
printf("栈满了,别放了\n");
return;
}
if (tag==1)
{
p->top1++;
p->date[p->top1] = a;
printf("%d已经入栈%d了\n", a, tag);
}
else
{
p->top2--;
p->date[p->top2] = a;
printf("%d已经入栈%d了\n", a, tag);
}
}
void pop(stack* p, int tag)
{
//判断是否栈空
if (tag==1)
{
if (p->top1==-1)
{
printf("栈空了\n");
return;
}
else
{
printf("%d已经出栈%d了\n", p->date[p->top1], tag);
p->top1--;
}
}
if (tag == 2)
{
if (p->top2 == 10)
{
printf("栈空了\n");
return;
}
else
{
printf("%d已经出栈%d了\n", p->date[p->top2], tag);
p->top2++;
}
}
}
链表
#include<stdio.h>
#include<stdlib.h>
typedef struct xstack
{
int data;
struct xstack* next;
}stack;
void push(stack*p, int a);
void pop(stack*p);
int main(int argv, char const* argc[])
{
stack* p = (stack*)malloc(sizeof(stack));
p->next = NULL;
push(p, 10);
pop(p);
}
void push(stack*p, int a)
{
stack* node= (stack*)malloc(sizeof(stack));
node->data = a;
node->next = p->next;
p->next = node;
printf("%d已入栈\n", a);
}
void pop(stack* p)
{
//判断是否栈空
if (p->next==NULL)
{
printf("栈空了\n");
return;
}
else
{
stack* tem ;
tem = p->next;
p->next = tem->next;
printf("%d已出栈\n", tem->data);
free(tem);
}
}