队列与多线程

  • 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");
    
    }
    
posted @ 2016-11-16 20:51  呉语伦比  阅读(207)  评论(0)    收藏  举报