チェーンキューのC言語実現

2224 ワード

#include 
#include 

#define ERROR 0
#define OK 1

typedef int Status ;
typedef int ElemType;

typedef struct Lnode
{
        ElemType data;
        Lnode* next;
}Lnode, *Link;

typedef struct queue
{
        Link head;
        Link tail;
        int len;
} queue;

Status Init(queue &qq)
{
       qq.head = (Link)malloc(sizeof(Lnode));
       if (qq.head == NULL) return ERROR;
       qq.tail = qq.head;
       qq.head -> next = NULL;
       qq.len = 0;
       return OK;
}

Status GetTop(queue &qq, ElemType &e)
{
       if (qq.head == qq.tail)
       return ERROR;
       e = qq.head->next->data;
       return OK;
}

Status Enqueue(queue &qq, ElemType e)
{
       Link temp;
       temp = (Link)malloc(sizeof (Lnode));
       if (temp == NULL) return ERROR;
       temp->data = e;
       qq.tail -> next = temp;
       qq.tail = temp;
       qq.len++;
       qq.tail -> next = NULL;
       return OK;
}

Status Dequeue(queue &qq, ElemType &e)
{
       if (qq.head == qq.tail)
       return ERROR;
       e = qq.head -> next -> data;
       Link p = qq.head -> next;
       free(p);
       p = NULL;
       qq.head -> next = qq.head ->next ->next;
       if (qq.head -> next == NULL)                 //    ,               ,               
       qq.tail = qq.head; 
       return OK;
}

Status Destroyqueue(queue &qq)
{
       Link q, tmp;
       q = qq.head -> next;
       free(qq.head);
       qq.head = NULL;
       while(q != NULL)
       {
               tmp = q -> next;
               free(q);
               q = tmp;
       }
       tmp = NULL;
       return OK;
}
int main()
{
    queue qq;
    int m, i;
    Init(qq);
    printf("how many nums?
"); scanf("%d", &m); for (i = 0; i < m; i++) { int e; scanf("%d", &e); Enqueue(qq, e); } int d; GetTop(qq, d); printf("%d
", d); for(i = 0; i < m; i++) { int e; Dequeue(qq, e); printf("%d ", e); } printf("
"); system ("pause"); return 0; }