C语言之队列学习笔记
2017-06-04 13:32
197 查看
#include<stdio.h> #include<stdlib.h> #define N 100 #define datatype char struct queue { datatype data ; int front; int rear; }; typedef struct queue Q; void init(Q * myqueue); int isempty(Q * myqueue); void enQueue(Q * myqueue, datatype num); datatype deQueue(Q * myqueue); void printfQ(Q * myqueue); datatype gethead(Q * myqueue);
#include"队列.h" void init(Q * myqueue) { myqueue->front = myqueue->rear = 0; } int isempty(Q * myqueue) { if (myqueue->front == myqueue->rear) return 1; return 0; } void enQueue(Q * myqueue, datatype num) { if (myqueue->rear == N) { printf("入队列失败"); return; } else { myqueue->data[myqueue->rear] = num; myqueue->rear += 1; } } datatype deQueue(Q * myqueue) { if (isempty(myqueue)) { printf("出队列失败"); return -1; } else { myqueue->front += 1; myqueue->data[myqueue->front-1]; } } void printfQ(Q * myqueue) { printf("\n"); if (isempty(myqueue)) { printf("队列为空"); } else { for (int i = myqueue->front; i < myqueue->rear; i++) { printf("%c ", myqueue->data[i]); } } } datatype gethead(Q * myqueue) { if (isempty(myqueue)) { printf("队列为空"); return -1; } else { return myqueue->data[myqueue->front]; } }
链表队列以及优先队列
struct queue { int num; int high; struct queue *pNext; }; typedef struct queue Queue; Queue * init(Queue *queueA); //初始化 Queue * EnQueue(Queue *queueA, int num, int high); //入队 Queue * DeQueue(Queue *queueA, Queue *pout); //出队 Queue * freeall(Queue *queueA); //清空 void insertEnQueue(Queue *queueA, int num, int high); void sort(Queue *queueA); void printall(Queue *queueA); //打印
#include"Queue.h" #include<stdio.h> #include<stdlib.h> Queue * init(Queue *queueA) //初始化 { return NULL; } Queue * EnQueue(Queue *queueA, int num, int high) //入队 { Queue *pnewnode = (Queue *)malloc(sizeof(Queue)); //分配内存 pnewnode->num = num; pnewnode->high = high; pnewnode->pNext = NULL; if (queueA == NULL) { queueA = pnewnode; return queueA; } else { Queue *p = queueA; while (p->pNext != NULL) { p = p->pNext; } p->pNext = pnewnode; return queueA; } } Queue * DeQueue(Queue *queueA, Queue *pout) //出队 { if (queueA == NULL) { return NULL; } else { pout->num = queueA->num; pout->high = queueA->high; Queue *ptemp = queueA; queueA = queueA->pNext; free(ptemp); return queueA; } } Queue * freeall(Queue *queueA) //清空 { } void insertEnQueue(Queue *queueA, int num, int high) { Queue *pnewnode = (Queue *)malloc(sizeof(Queue)); pnewnode->num = num; pnewnode->high = high; if (queueA == NULL) { pnewnode->pNext = NULL; queueA = pnewnode; return queueA; } else { if (pnewnode->high > queueA->high) { pnewnode->pNext = queueA; queueA = pnewnode; return queueA; } else { Queue *p = queueA; while (p->pNext != NULL) { p = p->pNext; } if (pnewnode->high <= p->high) { p->pNext = pnewnode; pnewnode->pNext = NULL; return queueA; } else { Queue *p1, *p2; p1 = p2 = NULL; p1 = queueA; while (p1->pNext != NULL) { p2 = p1->pNext; if (p1->high >= pnewnode->high && p2->high < pnewnode->high) { pnewnode->pNext = p2; p1->pNext = pnewnode; break; } p1 = p1->pNext; } return queueA; } } } } void sort(Queue *queueA) //优先级排队 { if (queueA == NULL || queueA->pNext == NULL) { return; } /*for (Queue * p1 = queueA; p1 != NULL; p1=p1->pNext) { for (Queue *p2 = p1->pNext; p2 != NULL; p2 = p2->pNext) { if (p1->high < p2->high) { Queue temp; temp.num = p1->num; p1->num = p2->num; p2->num = temp.num; temp.high = p1->high; p1->high = p2->high; p2->high = temp.high; } } }*/ } void printall(Queue *queueA) //打印 { if (queueA == NULL) { return; } else { printf("%d,%d,%p,%p\n",queueA->num,queueA->high,queueA,queueA->pNext); printall(queueA->pNext); } }
#include<stdio.h> #include<stdlib.h> #include"Queue.h" void main() { Queue *phead = NULL; //创建头结点 phead = init(phead); phead = insertEnQueue(phead, 1, 1); //sort(phead); printall(phead); printf("\n"); phead = insertEnQueue(phead, 2, 2); //sort(phead); printall(phead); printf("\n"); phead = insertEnQueue(phead, 3, 3); //sort(phead); printall(phead); printf("\n"); phead = insertEnQueue(phead, 4, 4); //sort(phead); printall(phead); printf("\n"); phead = insertEnQueue(phead, 5, 5); //sort(phead); printall(phead); printf("\n"); phead = insertEnQueue(phead, 6, 0); //sort(phead); printall(phead); printf("\n"); phead = insertEnQueue(phead, 7, 0); printall(phead); printf("\n"); phead = insertEnQueue(phead, 8, 1); //sort(phead); printall(phead); printf("\n"); phead = insertEnQueue(phead, 9,5); printall(phead); printf("\n"); system("pause"); }