您的位置:首页 > 产品设计 > UI/UE

02-线性结构3 Pop Sequence

2015-09-22 17:15 495 查看
#include <stdio.h>
#include <stdlib.h>

#define MaxSize 1001

typedef 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");
else
printf("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++;
}
else
return 0;
}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: