02-线性结构3 Pop Sequence

来源:互联网 发布:玻尔兹曼常数测量 知乎 编辑:程序博客网 时间:2024/06/07 02:29
#include <stdio.h>#include <stdlib.h>#define MaxSize 1001typedef struct node{int top;int cap;int data[MaxSize];} Stack;Stack* CreateStack();void Push(Stack *PtrS, int e);void Pop(Stack *PtrS);int CheckStack(int tmp[], int M, int N);int main(int argc, char const *argv[]){int M, N, K;//M (the maximum capacity of the stack), N (the length of push sequence), and K (the number of pop sequences to be checked). scanf("%d %d %d", &M, &N, &K);int *tmp = (int*)malloc(sizeof(int)*N);for( ; K > 0; K--){for(int i = 0; i < N; i++){scanf("%d", tmp+i);}if(CheckStack(tmp, M, N))printf("YES\n");elseprintf("NO\n");}return 0;}Stack* CreateStack(){Stack *PtrS = (Stack*)malloc(sizeof(Stack));PtrS->cap = MaxSize;PtrS->top = -1;return PtrS;}void Push(Stack *PtrS, int e){if(PtrS->top == PtrS->cap - 1)return;PtrS->top++;PtrS->data[PtrS->top] = e;}void Pop(Stack *PtrS){if(PtrS->top == -1)return;PtrS->top--;}int CheckStack(int tmp[], int M, int N){Stack *ps = CreateStack();Push(ps, 0);//让top指向data数组的第一个位置data[0]int idx = 0;int num = 1;while(idx < N){while(ps->data[ps->top] < tmp[idx] && idx < N && ps->top < M)Push(ps, num++);if(ps->data[ps->top] == tmp[idx]){Pop(ps);idx++;}elsereturn 0;}return 1;}

0 0