使用队链,
模拟排队执行命令,将将要执行的命令存入队列中,按照先进先出的原则进行执行
#ifndef QUEUE_H
#define QUEUE_H
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <error.h>
#include <string.h>
#include <unistd.h>
typedef struct work
{
int num;
int time;
char text[200];
}DATATYPE;
typedef struct node
{
DATATYPE data;
struct node * next;
}QueueLinkNode;
typedef struct queue
{
QueueLinkNode * head;
int clen;
QueueLinkNode * tail;
}QueueLink;
//创建队链
extern QueueLink * CreatQueueLink();
//入队
extern int EnterQueueLink(QueueLink * q, DATATYPE *data);
//是否为空,如果为空返回1
extern int IsEmptyQueueLink(QueueLink *q);
//出队
extern int QuitQueueLink(QueueLink *q, DATATYPE *data);
//销毁队链
extern int DestoryQueueLink(QueueLink *q);
//执行函数
extern int do_handle(QueueLink *q);
#endif // QUEUE_H
#include “queue.h”
int do_handle(QueueLink *q)
{
DATATYPE data;
while(!IsEmptyQueueLink(q))
{
QuitQueueLink(q,&data);
int num = data.num;
int len = data.time;
printf("++++++++++%dsecond+++++++++++\n",len);
while(len--)
{
printf("things %d %s\n", num, data.text);
sleep(1);
}
}
return 0;
}
QueueLink * CreatQueueLink()
{
QueueLink * temp = malloc(sizeof(QueueLink));
if(NULL == temp)
{
perror(" CreatQueueLink error");
return NULL;
}
temp->head =NULL;
temp->clen = 0;
temp->tail = NULL;
return temp;
}
int EnterQueueLink(QueueLink * q, DATATYPE *data)
{
QueueLinkNode * newnode = malloc(sizeof(QueueLinkNode));
if(NULL == newnode)
{
perror(“Creat EnterQueueLink error”);
return 1;
}
memcpy(&newnode->data, data, sizeof(DATATYPE));
newnode->next = NULL;
if(NULL == q->head)
{
q->head = newnode;
q->tail = newnode;
}
else
{
q->tail->next = newnode;
q->tail = newnode;
//q->tail = newnode;// q->tail = q->tail->next;
}
q->clen++;
return 0;
}
int IsEmptyQueueLink(QueueLink *q)
{
return q->headNULL || q->tailNULL;
}
int QuitQueueLink(QueueLink *q, DATATYPE *data)
{
if(q->headNULL || q->tailNULL)
{
fprintf(stderr,“the QueueLink is Empty”);
return 1;
}
else
{
memcpy(data,&q->head->data, sizeof(DATATYPE));
QueueLinkNode * temp =NULL;
temp = q->head;
q->head = q->head->next;
free(temp);
q->clen–;
}
return 0;
}
int DestoryQueueLink(QueueLink *q)
{
if(!IsEmptyQueueLink(q))
{
QueueLinkNode *temp;
temp = q->head;
q->head =temp->next;
free(temp);
q->clen–;
}
free(q);
return 0;
}
#include “queue.h”
int main(void)
{
DATATYPE data[]= {{1,1,“lets go to football”}
,{2,3,“half-time break”}
,{3,5,“match continues”}
,{4,7,“the football match is over”}
,{5,9,“go to walk”}};
QueueLink * q = CreatQueueLink();
int len = sizeof(data)/sizeof(data[1]);
int i;
for(i = 0; i< len; ++i)
{
EnterQueueLink(q,&data[i]);
}
do_handle(q);
DestoryQueueLink(q);
printf("Hello World!\n");
return 0;
}