4_链表栈

来源:互联网 发布:守夜人社工库源码 编辑:程序博客网 时间:2024/06/18 12:31

链表栈,跟前面栈的实现有点像,注释很详细,有什么不懂可以e_mail我,欢迎提出宝贵意见

#include <stdlib.h>#include <stdio.h>#include <assert.h>typedef struct _NODE {  int data;  struct _NODE *next;}NODE,*PNODE;typedef struct _STACK{PNODE pBtom;PNODE pTop;}STACK,*PSTACK;bool isEmpty(PSTACK pS);void InitStack(PSTACK pS);bool push(PSTACK pS,int val);bool pop(PSTACK pS);bool destroyStack(PSTACK pS);void InitStack(PSTACK pS){ if (pS==NULL) { return ; } PNODE pNew=(PNODE)malloc(sizeof(NODE)); if (pNew==NULL) { exit(-1); } pS->pTop=pNew;//把TOP指向,新添加的节点 pS->pBtom=pS->pTop;//Top和BTom在为空时指向同一个空节点// pNew->next=NULL;}bool push(PSTACK pS,int val){PNODE pNew=(PNODE)malloc(sizeof(NODE));if (pNew==NULL){return false;}pNew->data=val;pNew->next=pS->pTop;pS->pTop=pNew;//把top指向新添加的节点return true;}void showStack(PSTACK pS){if (isEmpty(pS)){return ;}    PNODE pTail=pS->pTop;while (pTail!=pS->pBtom){printf("%d\t",pTail->data);pTail=pTail->next;}printf("\n");}bool isEmpty(PSTACK pS){if (pS->pTop==pS->pBtom)//如果top==btom这时说明没有节点了{return true;}return false;}bool pop(PSTACK pS){if (isEmpty(pS)){return false;}     PNODE deleteNode=pS->pTop; pS->pTop=deleteNode->next; free(deleteNode); return true;}bool destroyStack(PSTACK pS){while (pS->pTop!=pS->pBtom){PNODE deleteNode=pS->pTop;pS->pTop=pS->pTop->next;free(deleteNode);}free(pS->pTop);//free(pS->pBtom);   // delete pS;return true;}void main(){   STACK ST;//存放在栈上,程序运行完会自动销毁,malloc或者new的才需要手动释放   InitStack(&ST);      push(&ST,1);   push(&ST,2);  // assert(true==destroyStack(&ST));   showStack(&ST);   system("pause");}