链式队列M

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #define ok 1
  4 #define error 0
  5 #define overflow -1
  6 #define TRUE 1
  7 #define FALSE 0
  8 #define status int
  9 typedef struct QNode
 10 {  int data;
 11    struct QNode *next;
 12 }QNode,*QueuePtr;
 13 typedef struct
 14 {  QueuePtr front;
 15    QueuePtr rear;
 16 }LinkQueue;
 17 status creat(LinkQueue &Q,int n)//创建一个长度为n的链队列,并返回首地址. 
 18 {
 19     QueuePtr p,s;
 20     Q.front=(QueuePtr)malloc(sizeof(QNode));
 21     p=Q.front;
 22     Q.front->data=n;
 23     printf("请输入队列元素:\n");
 24     while(n--)
 25     {
 26         if(!(s=(QueuePtr)malloc(sizeof(QNode))))
 27         exit(error);
 28         p->next=s;
 29         s->next=NULL;
 30         scanf("%d",&s->data);
 31         p=s;
 32     }
 33     Q.rear=p;
 34     return ok;
 35 }
 36 status DestroyQueue(LinkQueue &Q)
 37 {
 38     while(Q.front)
 39     {
 40         Q.rear=Q.front->next;
 41         free(Q.front);
 42         Q.front=Q.rear;
 43     }
 44     return ok;
 45 }
 46 status QueueEmpty(LinkQueue Q)
 47 {
 48     if(Q.front->next==NULL)
 49     return TRUE;
 50     else
 51     return FALSE;
 52 }
 53 status GetHead(LinkQueue Q,int &e)//取队头元素,用e返回 
 54 {
 55     QueuePtr p;
 56     if(Q.front==Q.rear)
 57     return error;
 58     p=Q.front->next;
 59     e=p->data;
 60     return ok;
 61 }
 62 status EnQueue(LinkQueue &Q,int e)//插入e为新的队尾元素 
 63 {
 64    QueuePtr p; 
 65    p=(QueuePtr)malloc(sizeof(QNode));
 66    if(!p)  exit(overflow);
 67    p->data=e;  p->next=NULL;
 68    Q.rear->next=p;
 69    Q.rear=p;
 70    Q.front->data++; 
 71    return ok;
 72 }
 73 status DeQueue(LinkQueue &Q,int &e)//删除Q的队头元素,用e返回其值 
 74 {
 75    QueuePtr p;
 76    if(Q.front==Q.rear)  return error;
 77    p=Q.front->next;
 78    e=p->data;
 79    Q.front->next=p->next;
 80    if(Q.rear==p) Q.rear=Q.front;
 81    free(p);
 82    Q.front->data--; 
 83    return ok;
 84 }
 85 status printQueue(LinkQueue Q)//打印链表 
 86 {
 87     QueuePtr p=Q.front;
 88     printf("链表元素为:");
 89     printf("\n********************\n");
 90     while(p->next)
 91     {
 92         p=p->next;
 93         printf("%d ",p->data);
 94     }
 95     printf("\n********************\n");
 96     return ok;
 97 }
 98 int main()
 99 {    
100     int m,n;
101     LinkQueue Q;
102     printf("请输入队列的长度:\n");
103     scanf("%d",&n);
104     creat(Q,n);
105     printQueue(Q);
106     printf("请输入你要插入的元素:\n");
107     scanf("%d",&m);
108     EnQueue(Q,m);
109     printQueue(Q);
110     printf("删除元素:\n");
111     DeQueue(Q,m);
112     printf("你所删除的元素为:%d\n",m);
113     printQueue(Q);
114       DestroyQueue(Q);
115     system("pause");
116     return ok;
117 }

posted on 2012-08-03 08:14  mycapple  阅读(172)  评论(0编辑  收藏  举报

导航