C言語でキューチェーン記憶を実現

14334 ワード

#include
#include
typedef struct QNode *P_QNode;
struct QNode
{
    int Data;
    P_QNode Next;
};
struct MyQueue
{
    P_QNode Front,Rear;

};
typedef struct MyQueue *P_MyQueue;
P_MyQueue CreateQueue()
{
    P_MyQueue q=(P_MyQueue)malloc(sizeof(struct MyQueue));
    q->Front=q->Rear=NULL;
    return q;

}
int IsEmpty(P_MyQueue q)
{
    return(q->Front==NULL);
}
void Add(P_MyQueue q,int elem)
{
    P_QNode n;
    n=(P_QNode)malloc(sizeof(struct QNode));
    if(IsEmpty(q))
    {
        n->Data=elem;
        n->Next=NULL;
        q->Front=n;
        q->Rear=n;
    }
    else
    {
        q->Rear->Next=n;
        n->Data=elem;
        n->Next=NULL;
        q->Rear=q->Rear->Next;
    }


}
int Dele(P_MyQueue q)
{
    if(IsEmpty(q))
    {
        printf("   ");
        return NULL;
    }
    else
    {
        P_QNode p;
        p=q->Front;
        int elem;
        elem=q->Front->Data;
        q->Front=q->Front->Next;
        free(p);
        return elem;

    }
}
void PrintAll(P_MyQueue q)
{
    P_QNode p=q->Front;
    while(p)
    {
        printf("%d ",p->Data);
        p=p->Next;
    }

}
int main()
{
    P_MyQueue Q1=CreateQueue();
    while(1)
    {
         printf("       :
A.
B.
C.
D.
"
); char c; scanf("%c",&c); if(c=='A') { printf(" :"); PrintAll(Q1); printf("
"
); } else if(c=='B') { printf(" :"); int a; scanf("%d",&a); Add(Q1,a); } else if(c=='C') { int a=Dele(Q1); printf(" :%d",a); printf("
"
); } else if(c=='D') { break; } else { printf("
"
); } char m=getchar(); } return 0; }