本试验取材于姥姥《数据结构(第2版)》.
堆栈的链式存储主要是在链表的基础上实现,大家千万不要觉得恐惧,认真的敲,认真的实现,其实一点都不能!加油,努力干,头发会有的!
//堆栈的链式存储
#include<stdio.h>
#include<stdlib.h>
#define ERROR -1
typedef int Position;
typedef struct SNode *PtrToSNode;
typedef int ElementType;
struct SNode{
ElementType Data;
PtrToSNode Next;
};
typedef PtrToSNode Stack;
Stack CreateStack(){
Stack S = malloc(sizeof(struct SNode));
S->Next = NULL;
return S;
}//构建一个堆栈的头结点,返回该节点指针
int IsEmpty(Stack S){
return (S->Next == NULL);
}//判断堆栈S是否为空,若是返回True,则返回False
int Push(Stack S,ElementType X){
PtrToSNode TmpCell;
TmpCell = (PtrToSNode )malloc(sizeof(struct SNode));
TmpCell->Data = X;
TmpCell->Next = S->Next;
S->Next = TmpCell;
return 1;
}
ElementType Pop(Stack S){
PtrToSNode FirstCell;
ElementType TopElem;
if(IsEmpty(S)){
printf("stack is empty");
return ERROR;
}else{
FirstCell = S->Next;
TopElem = FirstCell->Data;
S->Next = FirstCell->Next;
free(FirstCell);
return TopElem;
}
}
//堆栈给数据插接点,不存在是否为满的情况!
int main()
{
Stack S = CreateStack();
int m;
int empty = IsEmpty(S);
if (empty)
printf("Stack is Empty\n");
else
printf("Stack is not Empty\n");
m = Push(S,1);
m = Push(S,2);
m = Push(S,3);
m = Push(S,4);
if(m){
printf("push() is success!\n");
}else{
printf("push() is not success!\n");
}
m = Pop(S);
m = Pop(S);
if(m){
printf("pop()'s element:%d\n",m);
}else{
printf("pop() is not success!\n");
}
return 0;
}