顺序栈的C实现
//顺序栈的实现
//用一个结构体来实现顺序栈,用一个数组来存储栈中
//的元素,用一个整型变量top来指示栈顶部位置
#include<stdio.h>
#define stacksize 100
typedef int Datatype;
typedef struct
{
Datatype data[stacksize];
int top;
}seqstack;
//定义操作
//1、顺序栈初始化
void initstack(seqstack* s)
{
s->top = -1;
}
//2、顺序栈的销毁
//顺序栈是静态存储分配,在顺序栈退出作用域时自动释放顺序栈所占存储
//单元,因此顺序栈无须销毁。
//3、入栈
int push(seqstack* s, Datatype x)
{
if (s->top >= stacksize - 1)
{
printf("栈满,入栈失败");
return 0;
}
else
{
s->top = s->top + 1;
s->data[s->top] = x;
return 1;
}
}
//4、出栈
int pop(seqstack* s, Datatype* ptr)
{
if (s->top == -1)
{
printf("删除失败");
return 0;
}
else
{
*ptr = s->data[s->top];
s->top = s->top - 1;
return 1;
}
}
//5、取栈顶元素
int gettop(seqstack* s, Datatype* ptr)
{
if (s->top == -1)
{
printf("取栈顶失败");
return 0;
}
else
{
*ptr = s->data[s->top];
return 1;
}
}
//6、判空操作
int empty(seqstack* s)
{
if (s->top == -1)
return 1;
else
return 0;
}
//顺序栈的测试
int main()
{
Datatype x;
seqstack s;
initstack(&s);
//对10,15,20入栈
push(&s, 10);
push(&s, 15);
push(&s, 20);
//出栈
while (empty(&s)==0)
{
pop(&s, &x);
printf("出栈元素为%dn", x);
}
}
链栈的C实现
//链栈通常用单链表表示,结点结构与单链表结点结构相同。
//由于只在栈顶执行插入和删除,用单链表的头部做栈顶是
//最方便的,没有必要像单链表那样为了方便附加头结点
#include<stdio.h>
#include<malloc.h>
typedef int Datatype;
typedef struct stacknode
{
Datatype data;
stacknode* next;
}stacknode;
//初始化
void initstack(stacknode* top)
{
top = NULL;
}
//链栈的销毁
void destroystack(stacknode* top)
{
stacknode* p = top;
while (top != NULL)
{
top = top->next;
free(p);
p = top;
}
}
//入栈操作
stacknode* push(stacknode* top, Datatype x)
{
stacknode* s = (stacknode*)malloc(sizeof(stacknode));
s->data = x;
s->next = top;
top = s;
return top;
}
//出栈操作
stacknode* pop(stacknode* top, Datatype* ptr)
{
stacknode* p = top;
if (top == NULL)
{
printf("出栈失败");
}
else
{
*ptr = top->data;
top = top->next;
free(p);
return top;
}
}
//取栈顶元素
int gettop(stacknode* top, Datatype* ptr)
{
if (top == NULL)
{
printf("取栈顶元素失败");
return 0;
}
else
{
*ptr = top->data;
return 1;
}
}
//判空操作
int empty(stacknode* top)
{
if (top == NULL)
return 1;
else
return 0;
}
//测试链栈
void main()
{
Datatype x;
stacknode* top=NULL;
//初始化链栈
initstack(top);
//对10,20,30入栈
top = push(top, 10);
top = push(top, 20);
top = push(top, 30);
//出栈
while (top != NULL)
{
top=pop(top, &x);
printf("%dn", x);
}
}