云中烛火

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

链队列的一些基本操作
  

 1 #include<string.h>
 2 #include<ctype.h>
 3 #include<malloc.h>
 4 #include<limits.h>
 5 #include<stdio.h>
 6 #include<stdlib.h>
 7 #include<math.h>
 8 
 9 #define TRUE 1
10 #define FALSE 0
11 #define OK 1
12 #define ERROR 0
13 #define INFEASIBLE -1
14 #define MAXQSIZE 100
15 
16 typedef int Status;
17 typedef int Boolean;
18 typedef int QElemType;
19 
20 typedef struct QNode
21 {
22     QElemType data;
23     struct QNode *next;
24 }QNode,*QueuePtr;
25 
26 typedef struct
27 {
28     QueuePtr front;
29     QueuePtr rear;
30 }LinkQueue;
31 
32 Status InitQueue(LinkQueue *Q)
33 {
34     (*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
35     if(!(*Q).front)exit(OVERFLOW);
36     (*Q).front->next=NULL;
37 }
38 
39 
40 Status DestroyQueue(LinkQueue *Q)
41 {
42     while((*Q).front)
43     {
44         (*Q).rear=(*Q).front->next;
45         free((*Q).front);
46         (*Q).front=(*Q).rear;
47     }
48     return OK;
49 }
50 
51 Status EnQueue(LinkQueue *Q,QElemType e)
52 {
53     QueuePtr p;
54     p=(QueuePtr)malloc(sizeof(QNode));
55     if(!p)exit(OVERFLOW);
56     p->data=e;
57     p->next=NULL;
58     (*Q).rear->next=p;
59     (*Q).rear=p;
60     return OK;
61 }
62 
63 Status DeQueue(LinkQueue *Q,QElemType *e)
64 {
65     QueuePtr p;
66     if((*Q).front==(*Q).rear)
67         return ERROR;
68     p=(*Q).front->next;
69     *e=p->data;
70     (*Q).front->next=p->next;
71     if((*Q).rear==p)//删除最后一个节点
72         (*Q).rear=(*Q).front;
73     free(p);
74     return OK;
75 }
76 
77 void main()
78 {//测试
79     int i;
80     QElemType s[]={1,2,3,4,5,6,7,8,9};
81     LinkQueue Q;
82     InitQueue(&Q);
83     for(i=0;i<=8;i++)
84         EnQueue(&Q,s[i]);
85     QElemType e;
86     for(i=0;i<9;i++)
87         DeQueue(&Q,&e);
88     printf("%d",e);
89 }

 

posted on 2013-11-17 15:18  云中烛火  阅读(99)  评论(0)    收藏  举报