데이터 구조 --- 스 택 과 대기 열의 종합 응용
데이터 구조 에서 대기 열의 기본 조작 을 익히 면 창고 와 대기 열의 구 조 를 결합 시 켜 실제 문 제 를 유연 하 게 해결 할 수 있다.
실험 문제
많은 언어 현상 에서 흔히 볼 수 있 는 abcba 와 같은 문자 입 니 다. 이런 문 자 는 왼쪽 에서 오른쪽으로 읽 는 것 과 오른쪽 에서 왼쪽으로 읽 는 결 과 는 같 습 니 다. 이런 문 자 는 흔히 말 하 는 답문 입 니 다.프로그램 을 설계 하면 주어진 문자 가 답장 인지 아 닌 지 를 판단 할 수 있다.
스 택 의 선진 적 인 후 출 과 대열 의 후진 선 출 을 고려 하여 이 두 가지 구 조 를 결합 하여 필요 한 기능 을 실현 할 수 있 습 니 다. 곧 문 자 를 각각 입 대 를 하고 스 택 에 들 어간 다음 에 차례대로 출력 하여 서로 다른 문자 가 있 는 지 여 부 를 판단 할 수 있 습 니 다. 발견 하면 문자 가 답문 이 아니 라 는 것 을 증명 합 니 다.
힌트
1. 대기 열의 주요 데이터 구 조 는 다음 과 같다.
typedef struct QNode{
char data;
struct QNode *next;
}QNode,*Queueptr;
typedef struct{
Queueptr front;
Queueptr rear;
}linkQueue;
2. 프로그램의 주 프레임 워 크 는 다음 과 같다.
scanf("%c",&c);
while(c!='#') {push(&s,c); EnQueue(&Q,c); scanf("%c",&c); }
while(!(s.top==s.base))
{ pop(&s,&a); DeQueue(&Q,&b);
if(a!=b) {printf("This isn't acycle
");exit(0); }
}
printf("This is acycle
"); return OK;
넷. 이루어지다
#include<stdio.h>
#include<stdlib.h>
/********************** **********************/
/*
*/
typedef struct queue
{ //
int data;
struct queue *next;
}queue,*que;
typedef struct
{
que front; //
que rear; //
}Q;
typedef struct
{ //
int *top;
int *base;
int stacksize;
}sqstack;
/********************** **********************/
/*
。50 。
*/
void initStack(sqstack &s)
{
s.base=(int *)malloc(50*sizeof(sqstack));
if(!s.base)
printf(" !
");
s.top=s.base;
s.stacksize=50;
}
/*
, bool
*/
bool isEmpty(sqstack &s)
{
bool result=true;
if(s.top==s.base)
result=false;
else
result=true;
return result;
}
/*
*/
void push(sqstack &s,int e)
{
if(s.top-s.base>=s.stacksize)// ,
{
s.base=(int *)realloc(s.base,(s.stacksize+10)*sizeof(sqstack));
s.top=s.base+s.stacksize; // top
s.stacksize+=10;
}
*s.top++=e;
}
/*
, char
*/
char pop(sqstack &s,int &e)
{
if(s.top==s.base)
printf(" !");
e=*--s.top;
return e;
}
/*
*/
void initQ(Q &q)
{
q.front=q.rear=(queue *)malloc(sizeof(queue));
if(!q.front)
printf(" !");
q.front->next=NULL;
}
/*
*/
void EnQueue(Q &q,int e)
{
queue *p=(queue *)malloc(sizeof(queue));
p->data=e;
p->next=NULL;
q.rear->next=p; //
q.rear=p; //
}
/*
, char .
*/
char DeQueue(Q &q,int &e)
{
queue *p=(queue *)malloc(sizeof(queue));
if(q.front==q.rear)
printf(" !");
p = q.front->next; // t
e = p->data;
q.front->next=p->next;//
if(q.rear==p)// t, ( t )
q.rear = q.front;
free(p);
return e;
}
/********************** **********************/
int main()
{
char c;
int e,k;
bool ss=true;
sqstack s;
Q q;
initStack(s);
initQ(q);
printf(" , # :
");
scanf("%c",&c);
while(c!='#')
{
push(s,c); //
EnQueue(q,c); //
scanf("%c",&c);
}
while(!(s.top==s.base))//
{
pop(s,e);
DeQueue(q,k);
if(e!=k)
{
printf("This isn't a cycle!
");
exit(0);
}
}
printf("This is a cycle!
");
system("PAUSE");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.