5.队列实现,以及多线程对队列的插入进行操作

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 }
原文地址:https://www.cnblogs.com/xiaochi/p/8301531.html