链队列的一些基本操作
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 }
浙公网安备 33010602011771号