c語言實現基本的數據結構(三) 棧


#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>


#define StackSize 5
#define IncrementSize 5
// TODO:  在此處引用程序需要的其他頭文件
struct Stack
{
    int *base;
    int *top;
    int stacksize;
};
//初始化棧
bool Init_Stack(Stack* s){
    s->base = (int*)malloc(StackSize*sizeof(int));
    if (s->base == NULL) return false;
    s->top = s->base;
    s->stacksize = StackSize;
    return true;
}
//銷毀棧
bool Destroy_Stack(Stack* s){
    free(s->base);
    s->base = NULL;
    s->top = NULL;
    s->stacksize = 0;
    return true;
}
//清空棧
bool Clear_Stack(Stack* s){
    s->top = s->base;
    return true;
}
//插入元素
bool Push(Stack* s, int value){
    if (s->top - s->base >= s->stacksize){
        s->base = (int*)realloc(s->base, (StackSize + IncrementSize)*sizeof(int));
        s->top = s->base + s->stacksize;//重置一下棧頂,感覺也沒多大必要呀
        s->stacksize += IncrementSize;
    }
    *++s->top = value;//棧頂指向棧頂元素
    s->stacksize++;
    return true;
}
//彈出元素
int Pop(Stack* s){
    if (s->top == s->base) return false;
    int p = *s->top--;
    s->stacksize--;
    return p;
}
//逆序打印
void Print_Stack(Stack s){
    if (s.top == s.base) printf("此棧為空\n");
    while (s.top!=s.base){
        printf("%d->", Pop(&s));
    }
    printf("\n");
}
//正序打印
void Stack_Traverse(Stack s){
    if (s.top == s.base) printf("此棧為空\n");
    while (s.top != s.base){
        printf("%d->", *++s.base);
    }
    printf("\n");
}

 


免責聲明!

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



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