• 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 }
  • 相关阅读:
    实用画刷填充图形
    PDA连接远程数据库的三种解决方案
    图形编程入门之如何创建用于绘制的 Graphics 对象
    使用渐变画笔填充形状
    使用钢笔绘制线条和形状
    How to: Display a Gradient Fill
    实现防火墙的“电话已关机”,“此号码已停机”,“号码不存在”等提示音的方法
    MSDN课程
    android振动器
    android视频播放
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8301531.html
Copyright © 2020-2023  润新知