链栈
2018-04-11 23:50
218 查看
//linkstack.h
//main.cpp
#include<string.h> #include<malloc.h> #include<limits.h> #include<stdio.h> #include<io.h> #include<math.h> #include<process.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR -1 #define INFEASIBLE -1 typedef int DataType; typedef struct node { DataType data; struct node *next; }LinkStack; LinkStack *LStackInit() { LinkStack *h; h=(LinkStack*)malloc(sizeof(LinkStack)); h->data=1; h->next=NULL; return h; } int LStackIsEmpty(LinkStack *ls) { return (ls->next?FALSE:TRUE); } LinkStack *LStackPush(LinkStack *ls,DataType x) { LinkStack *p; p=(LinkStack*)malloc(sizeof(LinkStack)); p->data=x; p->next=ls; ls=p; return ls; } DataType LStackGetTop(LinkStack *ls) { if(!ls) { printf("栈是空的"); return NULL; } return ls->data; } LinkStack *LStackPop(LinkStack *ls,DataType *e) { LinkStack *p; if(!ls) { printf("栈是空的"); return NULL; } p=ls; *e=p->data; ls=ls->next; free(p); return ls; }
//main.cpp
#include"linkstack.h" int main() { int a[5]={1,2,3,4,5},i,isempty; LinkStack *linkStack; DataType tmp; linkStack=LStackInit(); printf("依次向栈内压入1,2,3,4,5:\n"); for(i=0;i<5;i++) { linkStack=LStackPush(linkStack,a[i]); } printf("栈顶元素为:"); printf("%d\n",LStackGetTop(linkStack)); linkStack=LStackPop(linkStack,&tmp); printf("出栈后的栈顶元素是:"); printf("%d\n",LStackGetTop(linkStack)); isempty=LStackIsEmpty(linkStack); if(isempty==0) { printf("当前链栈为非空链栈\n"); } else { printf("当前链栈为空链栈\n"); } return 0; }