日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

双栈共享

發布時間:2023/12/14 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双栈共享 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雙棧共享之數組實現


雙棧的結構體構建

typedef struct SNode{int *Data;int MaxSize;//棧的總長int Top1,Top2;//兩個棧的棧頂 }SNode,*Stack;

初始化創建

Stack CreateStack( int MaxSize ){Stack S=(Stack)malloc(sizeof(struct SNode));S->Data=(int *)malloc(MaxSize*sizeof(int));//為動態數組分配空間S->MaxSize=MaxSize;S->Top1=-1;//第一個棧的棧頂指向頭S->Top2=MaxSize;//第二個棧的棧頂指向尾return S;}

雙棧判空

int IsEmpty(Stack S,int Tag) {//分別判斷兩個棧的空的條件if(Tag==1&&S->Top1==-1)return 1;else if(Tag==2&&S->Top2==S->MaxSize)return 1;return 0; }

雙棧判滿

int IsFull(Stack S) {if(S->Top2-S->Top1==1&&(S->Top1!=-1||S->Top2!=S->MaxSize))//兩個棧不空且位置之差為1return 1;return 0; }

入棧

bool Push( Stack S, int X, int Tag ) {if(S->Top2-S->Top1==1)//if(S->top==S->MaxSize){//先判滿printf("Stack Full\n");return false;}switch(Tag){//分情況入棧case 1:{S->Data[++(S->Top1)]=X;return true;break;}case 2:{S->Data[--(S->Top2)]=X;return true;break;}default:break;} } int Pop( Stack S, int Tag ) {if(Tag==1){if(S->Top1==-1){printf("Stack %d Empty\n",Tag);return ERROR;}return S->Data[(S->Top1)--];}else{if(S->Top2==S->MaxSize){printf("Stack %d Empty\n",Tag);return ERROR;}return S->Data[(S->Top2)++];}}

出棧

int Pop( Stack S, int Tag ) {if(Tag==1){if(S->Top1==-1)//空{printf("Stack %d Empty\n",Tag);return ERROR;}return S->Data[(S->Top1)--];}else{if(S->Top2==S->MaxSize)//空{printf("Stack %d Empty\n",Tag);return ERROR;}return S->Data[(S->Top2)++];}} #include<stdio.h> #include<stdlib.h> #define ERROR 1e8 typedef struct SNode{int *Data;int MaxSize;int Top1,Top2; }SNode,*Stack;Stack CreateStack( int MaxSize ){Stack S=(Stack)malloc(sizeof(struct SNode));S->Data=(int *)malloc(MaxSize*sizeof(int));S->MaxSize=MaxSize;S->Top1=-1;S->Top2=MaxSize;return S;} bool Push( Stack S, int X, int Tag ) {if(S->Top2-S->Top1==1)//if(S->top==S->MaxSize){printf("Stack Full\n");return false;}switch(Tag){case 1:{S->Data[++(S->Top1)]=X;return true;break;}case 2:{S->Data[--(S->Top2)]=X;return true;break;}default:break;} } int Pop( Stack S, int Tag ) {if(Tag==1){if(S->Top1==-1){printf("Stack %d Empty\n",Tag);return ERROR;}return S->Data[(S->Top1)--];}else{if(S->Top2==S->MaxSize){printf("Stack %d Empty\n",Tag);return ERROR;}return S->Data[(S->Top2)++];}} int IsEmpty(Stack S,int Tag) {if(Tag==1&&S->Top1==-1)return 1;else if(Tag==2&&S->Top2==S->MaxSize)return 1;return 0; } int IsFull(Stack S) {if(S->Top2-S->Top1==1&&(S->Top1!=-1||S->Top2!=S->MaxSize))return 1;return 0; } int main() {int n,Tag,X;scanf("%d",&n);struct SNode *S;S=CreateStack(n);for(int i=0;i<n;i++){ scanf("%d%d",&X,&Tag);Push(S,X,Tag);}scanf("%d",&Tag);int y;while(!IsEmpty(S,Tag)){y=Pop(S,Tag);printf("%d\n",y);}return 0; }

總結

以上是生活随笔為你收集整理的双栈共享的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。