queue.h
#pragma once
#include <process.h>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define N 100 //队列长度
struct queue {
int data[N];
int head;//数据开头
int back;//数据结尾
};
typedef struct queue Queue; //简写
void init(Queue *p);//初始化
int isempty(Queue *p);//判断队列是否为空
int isfull(Queue *p);//判断是否满了
void enQueue(Queue *p, int key);//吃进去
int getlast(Queue *p);//获取弹出的数据
void deQueue(Queue *p);//出队
void show(Queue *p);//显示
queue.c
#include "queue.h"
void init(Queue *p)//初始化
{
p->head = p->back = 0; //队列为空
memset(p->data, 0, sizeof(int)*N);//数据清零
}
int isempty(Queue *p)//判断队列是否为空
{
if (p->head == p->back) { //队列为空, 头尾重合
return 1;
}
else {
return 0;
}
}
int isfull(Queue *p)//判断是否满了
{
if (p->back == N - 1) {
return 1;
}
else {
return 0;
}
}
void enQueue(Queue *p, int key)//吃进去
{
if (isfull(p)) {
return;
}else {
if (isempty(p) == 1) {
p->data[0] = key;
p->back++; //吃进一个东西
}
else {
for (int i = p->back; i >0; i--) {
p->data[i ] = p->data[i-1];//队列后移
}
p->data[0] = key;
p->back++;
}
}
}
int getlast(Queue *p)//获取弹出的数据
{
return p->data[p->back - 1];//要弹出的数据
}
void deQueue(Queue *p)//出队
{
if (isempty(p)) {
return;
}
else {
p->back--;
}
}
void show(Queue *p)//显示
{
printf("队列状态 ");
for (int i = 0; i < p->back; i++) {
printf("%4d", p->data[i]);
}
printf("\n");
}
队列(main1)和多线程.c
#include "queue.h"
void main1() {
struct queue myq;
init(&myq);
for (int i = 99; i < 108; i++) {
enQueue(&myq, i);
show(&myq);
}
while (!isempty(&myq)) {
printf("拉出的值%d \n",getlast(&myq));
deQueue(&myq);
show(&myq);
}
system("pause");
}
struct queue myq;
void run(void *p) {
int *px = p;
printf("线程编号%d\n", *px);
enQueue(&myq, *px);
}
void main() {
init(&myq);
int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
for (int i = 0; i < 10; i++) {
HANDLE mythread = _beginthread(run, 0, &a[i]);//mythread线程编号
//WaitForSingleObject(mythread,INFINITE); //等待
//WaitForMultipleObjects();
}
system("pause");
show(&myq);
system("pause");
}