데이터 구조 (c 언어) 의 대기 열 은 배열 과 링크 두 가지 실현 방식 이 있다.
37816 단어 c 언어
배열 구현
Squere.h
typedef int QElemType;
#define MAXSIZE 11 //
typedef struct{
QElemType data[MAXSIZE];
int front; //
int rear;// , ,
}SqQueue;
void InitQueue(SqQueue *Q);//
void ClearQueue(SqQueue *Q);//
int QueueLength(SqQueue Q);//
void inQueue(SqQueue *Q, QElemType e);//
void DeQueue(SqQueue *Q, QElemType *e);//
void prqueue(SqQueue Q);//
#include "Squsues.h"
#include "stdlib.h"
#include "cstdio"
void InitQueue(SqQueue *Q){
Q->front =0;
Q->rear =0;
}
void ClearQueue(SqQueue *Q){
Q->front = Q->rear =0;
}
int QueueLength(SqQueue Q){
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
void inQueue(SqQueue *Q, QElemType e){
if((Q->rear+1)%MAXSIZE == Q->front)//
exit(0);
Q->data[Q->rear] =e;//
Q->rear = (Q->rear +1)%MAXSIZE;// ,
}
void DeQueue(SqQueue *Q, QElemType *e){
if(Q->front == Q->rear)//
exit(0);
*e = Q->data[Q->front];//
Q->front = (Q->front+1)%MAXSIZE;// ,
}
void prqueue(SqQueue Q){
int i = Q.front;
while((i+Q.front) != Q.rear){
printf("%d",Q.data);
i=(i+1)%MAXSIZE;
}
printf("
");
}
링크 구현
quere.h
ypedef int ElemType;
typedef struct QNode{
ElemType data;
struct QNode *next;
}QNode,*QueuePrt;
typedef struct {
QueuePrt front,rear; //
}LinkQueue;
void initQueue(LinkQueue *q);
void InsertQueue(LinkQueue *q,ElemType e);//
void DeleteQueue(LinkQueue *q,ElemType *e);//
void DestroyQueue(LinkQueue *q);//
void printQueue(LinkQueue *q); //
int Queuelen(LinkQueue *q);//
void ThelistQueue();
quere.c
#include "Queues.h"
#include "stdlib.h"
#include "cstdio"
void initQueue(LinkQueue *q)
{
if(q==NULL)
exit(0);
q->front=q->rear=(QueuePrt)malloc(sizeof(QNode));
if(!q->front)
exit(0);
q->front->next=NULL;
}
void InsertQueue(LinkQueue *q,ElemType e)
{
QueuePrt p;
p=(QueuePrt)malloc(sizeof(QNode));
if(p==NULL)
exit(0);
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}
void DeleteQueue(LinkQueue *q,ElemType *e)
{
QueuePrt p;
if(q->front==q->rear)
return;
p=q->front->next;
*e=p->data;
q->front->next=p->next;
if(q->rear==p)//
q->rear=q->front;
free(p);
}
void DestroyQueue(LinkQueue *q)
{
while( q->front ) {
q->rear = q->front->next;
free( q->front );
q->front = q->rear;
}
}
void printQueue(LinkQueue *q ){
QueuePrt p;
p=q->front->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf("
");
}
int Queuelen(LinkQueue *q)
{
int i=0;
QueuePrt p = q->front;
while(q->rear != p){
i++;
p = p->next;
}
return i;
}
주 함수 에서 어떻게 사용 합 니까?함 수 를 만 들 었 기 때문에 여기에 함 수 를 붙 입 니 다:
void home3_25_b(){
printf(" ");
int x,y,chans=-1;
SqQueue q;
while(chans!=0) {
printf("/**********************************************/");
printf("
:
1.
2.
3.
4.
"
"5、
6、 "
);
scanf("%d", &chans);
switch (chans)
{
case 1: printf(" :");
InitQueue(&q);
printf(" ");
scanf("%d",&x);
inQueue(&q,x);
break;
case 2: printf(" ");
scanf("%d",&x);
inQueue(&q,x);
break;
case 3: DeQueue(&q,&y);
printf(" %d
",y);
break;
case 4: ClearQueue(&q);break;
case 5: prqueue(q);
break;
case 6: y=QueueLength(q);
printf("%d",y);
break;
}
}
}
void home3_25_a(){
printf(" ");
int x,y,chans=-1;
LinkQueue q;
while(chans!=0){
printf("/**********************************************/");
printf("
:
1.
2.
3.
4.
"
"5、
6、 "
);
scanf("%d", &chans);
switch (chans)
{
case 1: printf(" :");
initQueue(&q);
printf(" ");
scanf("%d",&x);
InsertQueue(&q,x);
break;
case 2: printf(" ");
scanf("%d",&x);
InsertQueue(&q,x);
break;
case 3: DeleteQueue(&q,&y);
printf(" %d
",y);
break;
case 4: DestroyQueue(&q);break;
case 5: printf(" :");
printQueue(&q);
break;
case 6: y=Queuelen(&q);
printf("%d",y);
break;
}
}
대열 의 코드 가 이렇게 많 습 니 다. 열성 네티즌 들 이 문 제 를 발견 하고 지적 해 주 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.