棧的實現

棧是一種先進後出的結構化表,棧只容許在棧頂操做元素。生活中其實有不少的例子,好比一堆盤子摞在一塊兒等等。棧的實現有兩種方式,一種是順序實現,另外一種是鏈式實現。主要是利用棧頂指針來進行操做。下面請看詳細代碼:ios

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

//靜態方式定義棧 
typedef struct {
    int data[MaxSize];//靜態數組存放棧元素 
    int top;//棧頂指針 
}SqStack;

//靜態方式初始化棧 
void InitStack(SqStack &S){
    S.top = -1;
}

//靜態方式判斷是否棧空 
bool StackEmpty(SqStack S){
    if(S.top==-1){
        return true;
    }else{
        return false;
    }
}

//靜態方式進棧
bool PushStack(SqStack &S,int x){
    if(S.top==MaxSize-1){//棧滿報錯 
        return false;
    }
    S.top = S.top+1;//指針加一,即指向下一個位置 
    S.data[S.top] = x;//元素進棧 
} 

//靜態方式出棧
bool PopStack(SqStack &S,int &x){
    if(S.top==-1){//棧空報錯 
        return false;
    }
    x = S.data[S.top];//棧頂元素出棧 
    S.top = S.top-1;//棧頂指針下移(邏輯上的刪除,其實元素依然存在於數組中) 
    return true;
}

//靜態方式讀棧頂元素
bool PopStack(SqStack &S,int &x){
    if(S.top==-1){//棧空報錯 
        return false;
    }
    x = S.data[S.top];//棧頂元素
    return true;
} 

/*
//共享棧(避免浪費)
typedef struct {
    int data[MaxSize];//靜態數組存放棧元素 
    int top0;//a棧頂指針
    int top1;//b棧頂指針 
}ShStack;

//共享方式初始化棧 
void InitStack(ShStack &S){
    S.top0 = -1;
    S.top0 = MaxSize;
} 
//判斷棧滿(top0+1==top1) 
*/

//鏈式定義棧 (單鏈表只容許在頭結點位置進行操做的一種方式) 
typedef struct LinkNode{
    int data;//數據域 
    struct LinkNode *next;//指針域 
}LinkNode,*LStack;

//鏈式初始化棧
bool InitLStack(LStack &S1){
    S1 = (LinkNode *)malloc(sizeof(LinkNode));
    if(S1==NULL){
        return false;
    }
    S1->next = NULL;
    return true;
} 

//鏈式進棧和出棧和單鏈表的頭插法和只在頭結點刪除元素同樣(見單鏈表插入和刪除) 

int main(int argc, char** argv) {
    SqStack S;//靜態方式聲明棧
    LStack S1;//鏈式聲明棧 
    return 0;
}
相關文章
相關標籤/搜索