데이터 구조 (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; } }

대열 의 코드 가 이렇게 많 습 니 다. 열성 네티즌 들 이 문 제 를 발견 하고 지적 해 주 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기