天天看点

多线程和队列

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");
}
           

继续阅读