数据结构与算法分析——c语言描述 第三章 栈
就是链表的增加删除都只能是第一个元素。没什么特别的。
stack.h
typedef int ElementType;
#ifndef _stack_h
#define _stack_h
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;
int IsEmpty(Stack s);
Stack CreatStack();
void DisposeStack(Stack s);
void MakeEmpty(Stack s);
void Push(ElementType X, Stack s);
ElementType Top(Stack s);
void Pop(Stack s);
#endif
stack.c
#include"stack.h"
#include<stdlib.h>
#include"fatal.h"
struct Node{
ElementType Element;
PtrToNode Next;
};
int IsEmpty(Stack s) {
return s->Next == NULL;
}
Stack CreatStack() {
Stack s;
s = malloc(sizeof(struct Node));
if (s == NULL)
Error("out of space");
s->Next = NULL;
return s;
}
void DisposeStack(Stack s) {
MakeEmpty(s);
free(s);
}
void MakeEmpty(Stack s) {
if (s == NULL)
Error("Must use CreateStack first");
else
while (!IsEmpty(s)) {
Pop(s);
}
}
void Push(ElementType X, Stack s) {
PtrToNode tmpCell;
tmpCell = malloc(sizeof(struct Node));
if (tmpCell == NULL) {
Error("out of space");
}
else {
tmpCell->Element = X;
tmpCell->Next = s->Next;
s->Next = tmpCell;
}
}
ElementType Top(Stack s) {
if (!IsEmpty(s))
return s->Next->Element;
Error("Empty stack");
}
void Pop(Stack s) {
PtrToNode firstCell;
if(IsEmpty(s))
Error("Empty stack");
else {
firstCell = s->Next;
s->Next = firstCell->Next;
free(firstCell);
}
}
#include"stack.h"
#include<stdio.h>
int main() {
Stack s = CreatStack();
Push(233333, s);
printf("%d", Top(s));
}