1. 程式人生 > >我要做的就是比昨天的我更強

我要做的就是比昨天的我更強

棧也是線性表的一種,它描述了一種後入先出的操作,可以用順序儲存結構和鏈式儲存結構實現
順序棧的定義由兩部分組成:

typedef struct{
    ElemType data[MAX_SIZE]; //儲存資料的陣列
    int top; //棧頂指標,它一開始指向-1
}SqStack;

sqstack.h如下:

#include <malloc.h>
#include <stdio.h>

#define MAX_SIZE 10
typedef int ElemType;

typedef struct{
    ElemType data[MAX_SIZE];
    int
top; }SqStack;

SqStack.cpp如下:

#include "sqstack.h"

void initStack(SqStack *&stack); //初始化棧
void destoryStack(SqStack *&stack); //銷燬棧
int getLength(SqStack *stack); //獲取長度
void printStack(SqStack *stack); //輸出棧
bool isEmpty(SqStack *stack); //判空

bool push(SqStack *&stack, ElemType e); //進棧
bool
pop(SqStack *&stack, ElemType &e); //出棧 ElemType peek(SqStack *stack); //棧頂元素 int main() { SqStack *stack; initStack(stack); push(stack,10); push(stack,20); push(stack,30); printStack(stack); printf("棧長度為:%d\n",getLength(stack)); ElemType e; pop(stack,e); printStack(stack
); printf("棧長度為:%d\n",getLength(stack)); e = peek(stack); printf("棧頂元素為:%d",e); return 0; } void initStack(SqStack *&stack){ stack = (SqStack *) malloc(sizeof(SqStack)); stack->top = -1; } void destoryStack(SqStack *&stack){ free(stack); } int getLength(SqStack *stack){ return (stack->top + 1) ; } bool isEmpty(SqStack *stack){ return stack->top == -1; } void printStack(SqStack *stack){ int i; for(i = 0; i<=stack->top; i++){ printf("%d\t",stack->data[i]); } } bool push(SqStack *&stack, ElemType e){ if(stack->top+1 == MAX_SIZE){ printf("棧滿,無法入棧\n"); return false; } stack->top++; stack->data[stack->top] = e; return true; } bool pop(SqStack *&stack, ElemType &e){ if(stack->top == -1){ printf("棧空,無可出棧元素"); return false; } e = stack->data[stack->top]; stack->top--; return true; } ElemType peek(SqStack *stack){ return stack->data[stack->top]; }

輸出結果如下:

10  20  30  棧長度為:3
10  20  棧長度為:2
棧頂元素為:20