キューヘッダポインタのないループチェーン


/*          */
#include<stdio.h>
typedef struct linkqueueNode
{
    int data;
    struct linkqueueNode *next;
}LkQueNode;
typedef struct linkque
{
    LkQueNode *rear;
}LkQue;
/*   */
void InitQueue(LkQue *LQ)
{
    LkQueNode *p;
    p=malloc(sizeof(LkQueNode));
    LQ->rear=p;
    p->next=LQ->rear;           /*          ,      。*/
}
/*   */
void EnQueue(LkQue *LQ,int x)
{
   LkQueNode *p;
   p=malloc(sizeof(LkQueNode));/*     */
   p->data=x;
   p->next=LQ->rear->next;
   LQ->rear->next=p;           /*        */
   LQ->rear=p;                 /*     */
}
/*   */
void Outqueue(LkQue *LQ,int *x)
{
    LkQueNode *p,*h;
    if(LQ->rear==LQ->rear->next)
        printf("   !
"
); else { h=LQ->rear->next;/* */ p=h->next; /* */ *x=p->data; h->next=p->next; if(p==LQ->rear) /* , 。*/ LQ->rear=h; free(p); } } main() { LkQue LQ; InitQueue(&LQ); int i,n=0,x; printf("---- ----
"
); printf(" :
"
); scanf("%d",&x); while(x!=0) { printf(" :
"
); EnQueue(&LQ,x); n++; scanf("%d",&x); } printf("---- ----
"
); for(i=1;i<=n;i++) { Outqueue(&LQ,&x); printf("%d\t",x); } }