天天看點

多線程和隊列

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

繼續閱讀