日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

双栈共享

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

雙棧共享之數組實現


雙棧的結構體構建

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; }

總結

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

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