Day 56 队列的链式结构

本文介绍了一种使用队列链表实现任务调度的方法,通过定义数据结构和相关操作,如创建、入队、出队等,实现了任务的先进先出执行策略。通过实例演示了如何将待执行的任务加入队列,并按顺序执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


使用队链,
模拟排队执行命令,将将要执行的命令存入队列中,按照先进先出的原则进行执行


#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值