queue.h
1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <Windows.h> 4 5 #define N 100 //队列 6 struct queue 7 { 8 int data[N]; 9 int head;//数据开头 10 int back;//数据结尾 11 }; 12 13 typedef struct queue Queue; 14 15 16 void init(Queue *p);//初始化 17 int isempty(Queue *p);//是否为空 18 int isfull(Queue *p);//是否满 19 20 void enQueue(Queue *p, int key);//入队 21 int getlast(Queue *p);//获取最后一个元素 22 void deQueue(Queue *p);//出队 23 void show(Queue *p);//显示
main.cpp
1 #include "queue.h" 2 #include <process.h> 3 Queue myq; 4 5 //多线程函数 6 void run(void *p) 7 { 8 //线程编号 9 int *px = (int *)p; 10 printf("线程编号%d ", *px); 11 //数据入队 12 enQueue(&myq, *px); 13 } 14 15 void main() 16 { 17 int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 18 for (int i = 0; i < 10; i++) 19 { 20 HANDLE mythread = (HANDLE)_beginthread(run, 0, &a[i]); 21 //WaitForSingleObject(mythread,INFINITE);//等待 22 } 23 show(&myq); 24 system("pause"); 25 } 26 27 //测试队列的操作 28 //void main() 29 //{ 30 // Queue myq; 31 // init(&myq); 32 // for (int i = 0; i < 10; i++) 33 // { 34 // enQueue(&myq, i); 35 // show(&myq); 36 // } 37 // 38 // while (!isempty(&myq)) 39 // { 40 // printf("出队的值%d", getlast(&myq)); 41 // deQueue(&myq); 42 // show(&myq); 43 // } 44 // 45 // system("pause"); 46 //} 47 48 //初始化队列 49 void init(Queue *p) 50 { 51 p->head = p->back = 0; 52 memset(p->data, 0, sizeof(int)*N); 53 } 54 55 //判断队列是否为空 56 int isempty(Queue *p) 57 { 58 if (p->head == p->back) 59 { 60 return 1; 61 } 62 else 63 { 64 return 0; 65 } 66 } 67 68 //判断队列是否满了 69 int isfull(Queue *p) 70 { 71 if (p->back == N - 1) 72 { 73 return 1; 74 } 75 else 76 { 77 return 0; 78 } 79 } 80 81 //入队操作 82 void enQueue(Queue *p, int key) 83 { 84 if (isfull(p)) 85 { 86 return; 87 } 88 else 89 { 90 if (isempty(p)) 91 { 92 p->data[p->back] = key; 93 p->back++; 94 } 95 else 96 { 97 for (int i = p->back - 1; i > 0; i--) 98 { 99 p->data[i] = p->data[i-1]; 100 } 101 102 p->data[0] = key; 103 p->back++; 104 } 105 } 106 } 107 108 //获取队列最后一个元素 109 int getlast(Queue *p) 110 { 111 return p->data[p->back - 1]; 112 } 113 114 //出队 115 void deQueue(Queue *p) 116 { 117 if (isempty(p)) 118 { 119 return; 120 } 121 else 122 { 123 p->back--; 124 } 125 } 126 127 //显示队列状态 128 void show(Queue *p) 129 { 130 for (int i = 0; i < p->back; i++) 131 { 132 printf("%4d", p->data[i]); 133 } 134 printf(" "); 135 }