栈的实现-链表
声明:
#include "stdio.h" #include "stdlib.h" //单链表结点 struct Node; //指向结点的指针类型 typedef struct Node *PNode; typedef int DataType; struct Node { DataType info; PNode link; }; //链接栈类型定义 struct LinkStack { //指向栈顶结点 PNode top; }; //链接栈类型的指针类型 typedef struct LinkStack * PLinkStack;
//创建一个空链栈 PLinkStack createEmptyStack_link(void) { PLinkStack plstack; plstack=(PLinkStack)malloc(sizeof(struct LinkStack)); if(plstack!=NULL) { plstack->top=NULL; } else { printf("out of space! \n"); } return plstack; }
//判断所指栈是否为空,如果是,则返回1,否则返回0; int isEmptyStack_link(PLinkStack plstack) { return (plstack->top==NULL); }
//进栈运算 void push_link(PLinkStack plstack,DataType x) { PNode p; p=(PNode)malloc(sizeof(struct Node)); if (p==NULL) { printf("out of space! \n"); } else { p->info=x; p->link=plstack->top; plstack->top=p; } }
//出栈运算 void pop_link(PLinkStack plstack) { PNode p; if (isEmptyStack_link(plstack)) { printf("empty stack top! \n"); } else { p=plstack->top; plstack->top=plstack->top->link; free(p); } }
//取栈顶元素 DataType top_link(PLinkStack plstack) { if (plstack->top==NULL) { printf("stack is empty ! \n"); } else { return (plstack->top->info); } }
测试:
int main(int argc,char* argv[]) { PLinkStack plstack; plstack=createEmptyStack_link(); push_link(plstack,5); push_link(plstack,3); push_link(plstack,7); push_link(plstack,59); push_link(plstack,12); printf("%d ",plstack->top->info); pop_link(plstack); printf("%d ",plstack->top->info); }
浙公网安备 33010602011771号