第一章 线性表的顺序存储结构的实现(C语言版)
第二章 线性表的链式存储结构的实现(C语言版)
分享一下自己学习数据结构时的代码
1:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾(栈顶)进行插入和删除操作的线性表。
一个具有注脚的文本。1
2:栈采用先进后出的原则
Status IniStack(stack *s);
Status StatckEmpty(stack s);
Status StackLength(stack s);
Status ClearStack(stack s);
Status DestroyStack(stack s);
Status Push(stack *s,int data);
Status Pop(stack *s,int *e);
#define OK 0;
#define ERROR 1;
#define OVERFLOW -1;
#define TRUE 1;
#define FALSE 0;
#define MAX 10
typedef int Status;
typedef struct stack{
int data;
//定义栈底
struct stack *base;
///定义栈顶
struct stack *top;
//定义栈的长度
int stackSize;
}stack;
Status IniStack(stack *s){
//为栈分配内存空间,栈底指向第一个栈的元素
(*s).base = (stack *)malloc(sizeof(stack) * MAX);
//分配内存失败
if(!(*s).base)
return ERROR;
//栈顶和栈底指向同一个位置
(*s).top = (*s).base;
//栈的长度可以随便定
(*s).stackSize = 10;
return OK;
}
Status StatckEmpty(stack s){
//栈顶和栈底指向同一位置
if(s.base == s.top)
return TRUE;
return FALSE;
}
Status StackLength(stack s){
return s.top-s.base;
}
Status ClearStack(stack s){
//直接让栈顶指向栈底即可
//这里不需要修改栈顶和栈底之间的元素,当入栈时,原来栈中存储的元素存储的内容自动更换
s.top = s.base;
}
Status DestroyStack(stack s){
//释放栈底指向的空间
free(s.base);
s.base = s.top = NULL;
s.stackSize = 0;
}
Status Push(stack *s,int data){
//判断栈是否已满
if((*s).top - (*s).base > MAX)
return OVERFLOW;
//将栈顶元素赋值
((*s).top)->data = data;
//栈顶向上移
(*s).top++;
printf("%p\n",(*s).top);
return OK;
}
Status Pop(stack *s,int *e){
//判断栈是否为空
if((*s).top == (*s).base)
return ERROR;
//栈顶向下移
(*s).top--;
*e = ((*s).top)->data;
printf("%p\n",(*s).top);
return OK;
}
栈:元素采取先进后出的原则
顺序栈的优点:查询速度快
顺序栈的缺点:使用一块连续的内存空间
摘自:科普中国 ↩︎