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 }
相关文章: