順序棧用C語言實現

來源:互聯網
上載者:User

標籤:類型   sqs   struct   順序儲存結構   nbsp   遍曆   typedef   class   crm   

從資料結構的角度看,棧和隊列也是線性表,其特殊性在於棧和隊列的基本操作是線性表操作的子集,它們是操作受限的線性表;

但從資料類型角度來看,它們是和線性表大不相同的兩種重要的抽象資料類型。

 

順序棧,即棧的順序儲存結構是用一組地址連續的儲存單元依次存放自棧頂到棧頂的資料元素
typedef struct{    int * base;   //棧底指標,在棧構造之前和摧毀之後,base的值為NULL    int * top;    //棧頂指標,在非空棧始終指向棧頂元素的下一個位置    int stacksize;    //當前已指派的儲存空間} SqStack;

base棧底指標:始終指向棧底位置,若base=NULL,則棧不存在

top棧頂指標:非空棧中的棧頂指標始終指向棧頂元素的下一個位置
注意順序棧的棧底也是存放資料的。
/*2016年10月28日20:46:25靜態棧*/#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define STACK_INIT_SIZE  100     //儲存空間初始分配量#define SRAKINCRMENT     10      //儲存空間分配增量typedef struct{int * base;   //棧底指標,在棧構造之前和摧毀之後,base的值為NULLint * top;    //棧頂指標,在非空棧始終指向棧頂元素的下一個位置int stacksize;    //當前已指派的儲存空間} SqStack;//函式宣告void InitStack(SqStack * S);void Push(SqStack * S, int e);void StackTraverse(SqStack * S);bool Pop(SqStack * S, int * e);int main(void){SqStack S;int val;InitStack(&S);Push(&S,1);Push(&S,2);Push(&S,3);Push(&S,4);StackTraverse(&S);printf("\n");Pop(&S, &val);Pop(&S, &val);StackTraverse(&S);return 0;}void InitStack(SqStack * S)    //初始化靜態棧{S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));if(NULL == S->base){printf("記憶體配置失敗,程式終止!\n");exit(-1);}S->top = S->base;S->stacksize = STACK_INIT_SIZE;return;}void Push(SqStack * S, int e)    //壓棧{if( (S->top - S->base) >= S->stacksize)   //如果棧滿{S->base = (int *)realloc(S->base, (S->stacksize + SRAKINCRMENT ) * sizeof(int));   if(NULL == S->base){printf("記憶體配置失敗,程式終止!\n");exit(-1);}S->top = S->base + S->stacksize;S->stacksize += SRAKINCRMENT;}*(S->top) = e;++(S->top);return;}void StackTraverse(SqStack * S)    //遍曆輸出,從棧頂開始遍曆{int * p = S->top;while( S->base != p){printf("%d\n",*(p-1));--p;}return;}bool Pop(SqStack * S, int * e)   //出棧{if(S->base == S->top)   //如果空{return false;}*e = *(S->top);--(S->top);return true;}

 

 

順序棧用C語言實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.