順序表示

#include <stdlib.h>
#include <iostream>
using namespace std;

enum { MAXNUM = 20 }; /* 棧中最大元素個數,應根據需要定義 */
typedef int DataType; /* 棧中元素類型,應根據需要定義 */
struct SeqStack {     /* 順序棧類型定義 */
    int t;      /* 棧頂位置指示 */
    DataType s[MAXNUM];
};
typedef  struct SeqStack SeqSack, *PSeqStack;   /* 順序棧類型和指針類型 */

/*創建一個空棧;為棧結構申請空間,并將棧頂變量賦值為-1*/
PSeqStack createEmptyStack_seq(void) {
    PSeqStack pastack = (PSeqStack)malloc(sizeof(struct SeqStack));
    if (pastack == NULL)
        printf("Out of space!! \n");
    else
        pastack->t = -1;
    return pastack;
}

/*判斷pastack所指的棧是否為空棧,當pastack所指的棧為空棧時,則返回1,否則返回0*/
int isEmptyStack_seq(PSeqStack pastack) {
    return pastack->t == -1;
}

/* 在棧中壓入一元素x */
void push_seq(PSeqStack pastack, DataType x) {
    if (pastack->t >= MAXNUM - 1)
        printf("Stack Overflow! \n");
    else {
        pastack->t++;
        pastack->s[pastack->t] = x;
    }
}

/* 刪除棧頂元素 */
void pop_seq(PSeqStack pastack) {
    if (pastack->t == -1)
        printf("Underflow!\n");
    else
        pastack->t--;
}

/* 當pastack所指的棧不為空棧時,求棧頂元素的值 */
DataType top_seq(PSeqStack pastack) {
    return pastack->s[pastack->t];
}

int main()
{
    PSeqStack st;
    st = createEmptyStack_seq();
    cout << isEmptyStack_seq(st) << endl;
    push_seq(st, 1);
    push_seq(st, 2);
    push_seq(st, 3);
    cout << top_seq(st) << endl;
    pop_seq(st);
    cout << top_seq(st) << endl;
    cout << isEmptyStack_seq(st) << endl;
}

鏈接表示

#include <stdlib.h>
#include <iostream>
using namespace std;

typedef int DataType;
struct  Node;                   /* 單鏈表結點 */
typedef  struct Node  *PNode;   /* 指向結點的指針類型 */
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;
}

/*判單鏈形式棧是否為空棧*/
int isEmptyStack_link(PLinkStack plstack) {
    return plstack->top == NULL;
}

/* 在棧中壓入一元素x */
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) {
    if (isEmptyStack_link(plstack))
        printf("Empty stack pop.\n");
    else {
        PNode p = plstack->top;
        plstack->top = plstack->top->link;
        free(p);
    }
}

/* 對非空棧求棧頂元素 */
DataType top_link(PLinkStack plstack) {
    return plstack->top->info;
}

int main()
{
    PLinkStack st;
    st = createEmptyStack_link();
    cout << isEmptyStack_link(st) << endl;
    push_link(st, 1);
    push_link(st, 2);
    push_link(st, 3);
    cout << top_link(st) << endl;
    pop_link(st);
    cout << top_link(st) << endl;
    cout << isEmptyStack_link(st) << endl;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容