队列与多线程
- stack.h
#include <Windows.h> #include <process.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)==1) { return; } else { if (isempty(p) == 1) { p->data[0] = key; p->back++;//吃进去一个东西 back=1 } 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"); } - main.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); } //int a[10] int *p=a 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 hd= _beginthread(run, 0, &a[i]);//mythread线程编号 // WaitForSingleObject(hd, INFINITE);//等待同步,异步 // WaitForMultipleObjects() } system("pause"); show(&myq); system("pause"); }

浙公网安备 33010602011771号