鏈棧的實現


  1 /*鏈棧*/
  2 /*鏈棧的結構和各種基本操作都類似於線性鏈表
  3 *只是要注意它的插入和刪除操作只能在棧頂進行
  4 *為了方便操作,我們將鏈表的頭部作為棧頂
  5 */
  6 #include<stdio.h>
  7 #include<stdlib.h>
  8 
  9 //結構定義
 10 typedef struct node
 11 {
 12     elementType data;
 13     struct node *next; 
 14 } LSNode;//鏈棧節點 
 15 typedef struct
 16 {
 17     struct LSNode *top;
 18     int size;
 19 }*PSTACK;//鏈棧 
 20 typedef int elementType;
 21 
 22 //基本操作
 23 //注意:配合CreatStack(),應該有DisposeStack(PSTACK) 
 24  PSTACK CreatStack()
 25  {
 26      PSTACK p=NULL;
 27     p=(PSTACK)malloc(sizeof(*PSTACK));
 28      if(p==NULL)
 29      {
 30          printf("Cannot malloc for PSTACK\n");
 31          //根據內存分配失敗,業務是否還能進行選擇 
 32         //return NULL;
 33         exit(1); 
 34     }
 35     else
 36     {
 37         p->top=NULL;
 38         p->size=0;
 39         return p;
 40     }
 41  }
 42  int IsEmpty(PSTACK s)
 43  {
 44      if(s==NULL)
 45          return 1;
 46     else
 47         return 0;
 48  }
 49  void PopStack(PSTACK s)//出棧 
 50  {
 51      if(IsEmpty(s))
 52      {
 53         printf("Stack is Empty\n");
 54     }
 55     else
 56     {
 57         LSNode*p=NULL;
 58          p=s->top->next;
 59          free(s->top);
 60          s->top=p;
 61          s->size--;
 62     }
 63  }
 64  void MakeEmptyStack(PSTACK s)//清空棧 
 65  {
 66      while(s->top!=NULL)
 67     {
 68         //PopStack()中有重復判斷,不爽大可以重寫
 69         PopStack(s);  
 70     }
 71  }
 72  void DisposeStack(PSTACK s)//刪除棧 
 73 {
 74      MakeEmptyStack(s);
 75      free(s);
 76 }
 77 void PushStack(elementType x, PSTACK s)//壓棧,入棧 
 78 {
 79     LSNode*p=NULL;
 80     p=(LSNode*)malloc(sizeof(LSNode));
 81     if(p==NULL)
 82     {
 83         printf("Cannot malloc for LSNode\n");
 84         //根據內存分配失敗,業務是否還能進行選擇 
 85         //return NULL;
 86         exit(1);
 87     } 
 88     p->data=x;
 89     p->next=s->top;
 90     s->top=p;
 91     s->size++;
 92 }
 93 elementType TopStack(PSTACK s)//取棧頂元素
 94 {
 95     if(s->top==NULL)
 96         return NULL;
 97     else 
 98         return s->top->data;
 99 }
100 elementType TopAndPop(PSTACK s)//取棧頂元素,並出棧(棧空時返回NULL)
101 {
102     //因為使用此函數前提是已經判斷了棧非空,這里不做重復判斷
103     elementType x;
104     x=TopStack(s);
105     PopStack(s);
106     return x; 
107 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM