备考期间写的栈类数据结构相关基本算法的C语言实现,为以后使用方便,现记录如下:
全局定义和依赖:
#include <stdio.h>
#include <stdlib.h>
#define elemType int
#define ERROR 0
#define OK 1
#define END NULL
栈结点:
typedef struct stack
{
elemType data;
struct stack *next;
} stack,*STACK;
初始化栈(无头结点):
void initStack(STACK s)
{
s = NULL;
}
栈判空:
//判栈空
int stackIsEmpty(STACK s)
{
if(s==NULL){return OK;}
else{return ERROR;}
}
入栈操作:
//入栈 此函数参数应当写成STACK &s型,否则会出现错误
int pushStack(STACK &s,elemType e)
{
stack *p = (stack *)malloc(sizeof(stack));
if(p==NULL) {return ERROR;}
else{
p->data = e;
p->next = s;
s = p;
return OK;
}
}
出栈操作:
//出栈 此函数参数应当写成STACK &s型,否则会出现错误
int popStack(STACK &s)
{
if(stackIsEmpty(s)){return ERROR;}
else{
stack *t = s;
//printf("%d ",s->data);
s = s->next;
free(t);
return s->data;
}
}
获取栈顶元素:
//获取栈顶元素内容
int getStackTop(STACK s)
{
if(stackIsEmpty(s)){return ERROR;}
else{
int e = s->data;
return e;
}
}
置栈空:
//置栈空 此函数参数应当写成STACK &s型,否则会出现错误
int clearStack(STACK &s)
{
if(stackIsEmpty(s)){return ERROR;}
else{
stack *t;
while(s)
{
t = s;
s = s->next;
free(t);
}
s == NULL;
return OK;
}
}
获取栈的长度:
//获取栈的长度
int getStackLength(STACK s)
{
if(stackIsEmpty(s)){return 0;}
stack* p = s;
int length = 0;
while(s)
{
length++;
s = s->next;
}
return length;
}
遍历栈:
//遍历栈
void traversalStack(STACK s)
{
if(stackIsEmpty(s)){exit(ERROR);}
stack* p = s;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
注:以链表方式存储的栈不存在上溢,无需判栈满