順序棧的實現C語言

來源:互聯網
上載者:User

沒有什麼要講的。順序棧的結構體裡:頭指標,尾指標,還有棧的容量。構建棧的時候,就是尋找出一片大小合適的記憶體空間,並用結構體裡的尾指標指向這片空間。頭指標開始也是指向這片空間的。壓棧就是:先判斷空間是否足夠?不夠的話,繼續分配空間;夠的話給頭指標指向的結點賦值,並把頭結點向後移一位(也就是說頭指標始終指著的空間中data沒有任何值)。彈棧就是:首先將頭指標移回一個單位,然後將用e返回棧頂的值。

#include <stdio.h> #include <stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREAMENT 10#define OVERFLOW    -1#define ERROR  0#define OK 1typedef int Status;typedef int ElemType;typedef struct {        ElemType *base;        ElemType *top;        int  stacksize;} st;Status InitStack(st &ss){       ss.base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));       if (!ss.base) exit(OVERFLOW);       ss.top = ss.base;       ss.stacksize = STACK_INIT_SIZE;       return OK;}Status GetTop(st &ss, ElemType &e){       if (ss.base == ss.top)       return ERROR;       e = *(ss.top - 1);       return OK;}Status Push(st &ss, ElemType e){       if (ss.top - ss.base >= ss.stacksize)       {          ss.base = (ElemType*)realloc(ss.base, ss.stacksize + STACKINCREAMENT * sizeof(ElemType));          if (!ss.base) exit(OVERFLOW);          ss.top = ss.base + ss.stacksize;          ss.stacksize = ss.stacksize + STACKINCREAMENT * sizeof(int);       }       *ss.top = e;       ss.top++;       return OK;}Status Pop(st &ss, ElemType &e){       if (ss.top == ss.base) return ERROR;       e = *(--ss.top);       return OK;}Status DestroyStack(st &ss){       free(ss.base);       ss.base = NULL;       ss.top = NULL;       ss.stacksize = 0;       return OK;} Status CleatStack(st &ss){       ss.top = ss.base;       ss.stacksize = STACK_INIT_SIZE;       return OK;}int StackEmpty(st &ss){       if (ss.top == ss.base)       return 1;       return 0;}int StackLen(st &ss){    return (ss.top - ss.base);}void print(st &ss){     int m = StackLen(ss);     int i;     for (i = 0; i < m; i++)     {         ElemType e;         Pop(ss,e);         printf("%d ", e);     }     printf("\n");     return ;}int main(){    st ss;     InitStack(ss);     int m, i;    if(StackEmpty(ss)) printf("empty\n");    printf("how many nums do you want to printf\n");    scanf("%d", &m);    for (i = 0; i < m; i++)    {        int e;        scanf("%d", &e);        Push(ss, e);    }    printf("%d\n", StackLen(ss));    print(ss);    system ("pause");    return 0;    } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.