1. 程式人生 > >每天一個數據結構-----棧的順序儲存實現

每天一個數據結構-----棧的順序儲存實現

#include <stdio.h>



#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define MAXSIZE 10



typedef int Status;

typedef int SelemType;

typedef struct

{

    SelemType data[MAXSIZE];

    int top;

} StackList;

//初始化棧

Status InitStack(StackList *stack)

{

    stack->top = -1;

    return OK;

}

//判斷棧stack是否為空棧

Status StackEmpty(StackList stack)

{

    if (stack.top == -1) return TRUE;

    else return FALSE;

}

//將SelemType:e 做入棧操作

//初始化條件:棧stack非滿

Status Push(StackList *stack,SelemType e)

{

    if (stack->top >= MAXSIZE-1)  return ERROR;

    stack->top++;

    stack->data[stack->top] = e;

    return OK;

}

//出棧

Status Pop(StackList *stack,SelemType *e)

{

    if (stack->top == -1) return FALSE;



    *e = stack->data[stack->top];

    stack->top--;



    return OK;

}

//獲取棧stack的元素個數

int StackLength(StackList stack)

{

    return stack.top+1;

}

// 把S置為空棧

Status ClearStack(StackList *stack)

{

    stack->top=-1;

    return OK;

}

Status visit (SelemType e){

    printf("%d\n",e);

    return OK;

}

//從棧底到棧頂遍歷每一個元素

Status StackTraver (StackList *stack,SelemType *e)

{

    int i;

    if (stack->top == -1) return ERROR;

    for (i=0;i<=stack->top;i++)

    {

        visit(stack->data[i]);

    }

    return OK;

}



int main() {

    StackList stack;

    int i;

    SelemType e ;



    printf("初始化棧stack...:\n");



    InitStack(&stack);



    if (StackEmpty(stack))

        printf("棧stack是空棧...\n");



    printf("順序將0,100,200,···500做入棧操作...\n");

    for (i = 0;i<6;i++)

        Push(&stack,i*100);





    printf("做入棧操作後棧stack長度:%d\n",StackLength(stack));

    printf("棧stack各元素為:\n");



    StackTraver(&stack, &e);



    printf("將棧頂元素做出棧操作...\n");

    Pop(&stack, &e);

    printf("棧頂元素:%d已經出棧\n",e);



    printf("棧頂元素出棧之後:棧stack長度:%d\n",StackLength(stack));



    printf("清空stack棧\n");

    ClearStack(&stack);



    return 0;

}