#include<stdio.h>
#include<stdlib.h>
typedef struct stack
{
int maxsize;
int top;
int *arr;
} Stack, *pStack;
pStack CreatStack(int n)
{
pStack s = (pStack)malloc(sizeof(Stack));
s->arr = (int*)malloc(sizeof(int) * n);
s->maxsize = n;
s->top = -1;
return s;
}
int IsEmpty(pStack s)
{
return s->top == -1;
}
int Top(pStack s)
{
if (IsEmpty(s))
{
return -1;
}
return s->arr[s->top];
}
int Pop(pStack s)
{
if (IsEmpty(s))
{
return -1;
}
s->top--;
return 0;
}
int IsFull(pStack s)
{
return s->top == s->maxsize - 1;
}
int Push(pStack s, int k)
{
if (IsFull(s))
{
return -1;
}
s->arr[++s->top] = k;
return 0;
}
int check(int maxsize, int arr[], int datalen)
{
pStack s = CreatStack(maxsize);
int i,j,temp;
int n = 0;//入栈的序列可以不用数组
for (i = 0; i < datalen; i++)
{
temp = arr[i];
//堆栈没满,并且栈顶元素小于待检验数字,入栈
while (!IsFull(s) && Top(s) < temp)
{
Push(s,++n);
}
if (Top(s) == temp)
{
Pop(s);
continue;
}
else
{
return -1;
}
}
free(s->arr);
free(s);
return 0;
}
int main()
{
int maxsize,datalen,datacount;
scanf("%d%d%d",&maxsize,&datalen,&datacount);
int arr[datacount][datalen];
int i,j;
for (i = 0; i < datacount; i++)
{
for (j = 0; j < datalen; j++)
{
scanf("%d",&arr[i][j]);
}
}
for (i = 0; i < datacount; i++)
{
if (check(maxsize,arr[i],datalen) == -1)
{
i == datacount - 1 ? printf("NO") : printf("NO\n");
}
else
{
i == datacount - 1 ? printf("YES") : printf("YES\n");
}
}
return 0;
}
Pop Sequence
最新推荐文章于 2020-07-18 18:04:22 发布