1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
#include <stdio.h> #include <stdlib.h>
typedef int QElemType typedef struct QNode{ QElemType data struct QNode *next }QNode, *QueuePtr typedef struct{ QueuePtr front QueuePtr rear }LinkQueue
int InitQueue(LinkQueue &Q){ Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)) if (!Q.front) exit(-1) Q.front->next = NULL return 1 }
int EnQueue(LinkQueue &Q, QElemType e){ QueuePtr p = (QueuePtr)malloc(sizeof(QNode)) if (!p){ exit(-1) } p->data = e p->next = NULL Q.rear->next = p Q.rear = p return 1 }
int DeQueue(LinkQueue &Q, QElemType &e){ if (Q.front == Q.rear) return -1 QueuePtr p = Q.front->next e = p->data Q.front->next = p->next if (Q.rear == p) Q.rear = Q.front free(p) return 1 }
int DestroyQueue(LinkQueue &Q){ while (Q.front){ Q.rear = Q.front->next free(Q.front) Q.front = Q.rear } return 1 }
int ClearQueue(LinkQueue &Q){ Q.front = Q.rear Q.front->next = NULL return 1 }
int QueueEmpty(LinkQueue Q){ return (Q.front->next ==NULL && Q.rear->next == NULL) ? 1 : 0 } int QueueLength(LinkQueue Q){ int length=0 QueuePtr p = Q.front->next while (p){ length++ p = p->next } return length } int GetHead(LinkQueue &Q, QElemType &e){ e = Q.front->next->data return 1 } int QueueTraverse(LinkQueue Q, int (*visit)(QueuePtr p)){ QueuePtr p = Q.front->next while(p){ visit(p) p = p->next } printf("n") return 1 } int data_output(QueuePtr p){ printf("%d ", p->data) return 1 } int main(){ int data,data2 LinkQueue Q InitQueue(Q) int a[5] = { 0, 1, 2, 3, 4 } for (int i = 0 EnQueue(Q, i) } QueueTraverse(Q, data_output) DeQueue(Q, data) printf("出队%dn", data) QueueTraverse(Q, data_output) printf("长度%dn", QueueLength(Q)) if (!(GetHead(Q, data2))){ printf("error") return -1 } printf("头结点%dn", data2) return 0 }
|
近期评论