cmake使用方法详解

  1. 编写C文件

test.h

#include<stdio.h>
#include<stdlib.h>
#include <stdbool.h>


typedef struct _Item
{
int data; //数据
int prio; //优先级,值越小,优先级越高
}Item;
typedef struct _PNode
{
Item item;
struct _PNode *next;
}PNode, *PQueue;

void InitPQueue(PQueue pQueue); //初始化队列
PNode* BuyNode(Item item); //从堆中申请一个节点的内存空间
void Push(PQueue pQueue, Item item); //入队,从队尾(rear)入
bool Pop(PQueue pQueue, Item *pItem); //出队,从队首(front)出
int GetPQueueLen(PQueue pQueue); //获取队列长度
void ShowQueue(PQueue pQueue); //输出队列所有元素
bool IsEmpty(PQueue pQueue); //队列为空则返回true
bool GetFront(PQueue pQueue, Item *pItem); //获取队首元素
void Destroy(PQueue pQueue); //销毁队列(释放所有节点的内存空间)

test.c

#include <stdio.h>
#include "test.h"


//初始化队列
void InitPQueue(PQueue pQueue)
{
	if (NULL == pQueue)
	return;
	pQueue->next = NULL;
}


//从堆中申请一个节点的内存空间
PNode* BuyNode(Item item)
{
	PNode *pTmp = (PNode*)malloc(sizeof(PNode));
	pTmp->item = item;
	pTmp->next = NULL;
	return pTmp;
}


//入队
void Push(PQueue pQueue, Item item)
{
	PNode *pTmp = BuyNode(item);
	PNode *pPre = pQueue; 
	PNode *pCur = pQueue->next;
	while (NULL != pCur)
	{
	if (pCur->item.prio > item.prio)
	{
	pTmp->next = pCur;
	pPre->next = pTmp;
	return;
	}
	else
	{
	pPre = pCur;
	pCur = pCur->next;
	}
	}
	pPre->next = pTmp;
}


//出队,从队首(front)出
bool Pop(PQueue pQueue, Item *pItem)
{
	if (!IsEmpty(pQueue))
	{
	PNode *pTmp = pQueue->next;
	*pItem = pTmp->item;
	pQueue->next = pTmp->next;
	free(pTmp);
	return true;
	}
	return false;
}


//获取队列长度
int GetPQueueLen(PQueue pQueue)
	{
	int iCount = 0;
	PNode *pCur = pQueue->next;
	while (NULL != pCur)
	{
	++iCount;
	pCur = pCur->next;
	}
	return iCount;
}


//输出队列所有元素
void ShowQueue(PQueue pQueue)
{
	PNode *pCur = pQueue->next;
	while (NULL != pCur)
	{
	printf("优先级:%d\n", pCur->item.prio);
	printf("数据:%d\n", pCur->item.data);
	pCur = pCur->next;
	}
	printf("\n");
}


//队列为空则返回true
bool IsEmpty(PQueue pQueue)
{
	return pQueue->next == NULL;
}


//获取队首元素
bool GetFront(PQueue pQueue, Item *pItem)
{
	if (!IsEmpty(pQueue))
	{
	*pItem = pQueue->item;
	return true;
	}
return false;
}


//销毁队列(释放所有节点的内存空间)
void Destroy(PQueue pQueue)
	{
	PNode *pCur = pQueue->next;
	while (NULL != pCur)
	{
	pQueue = pCur->next;
	free(pCur);
	pCur = pQueue;
	}
}


int main()
{
	PNode head;
	InitPQueue(&head);
	Item item = { 3, 6 };
	Push(&head, item);
	item.data = 5;
	item.prio = 3;
	Push(&head, item);
	item.data = 1;
	item.prio = 8;
	Push(&head, item);
	item.data = 5;
	item.prio = 1;
	Push(&head, item);
	item.data = 5;
	item.prio = 3;
	Push(&head, item);
//	ShowQueue(&head);
	while (!IsEmpty(&head))
	{
	Pop(&head, &item);
	printf("优先级:%d\n", item.prio);
	printf("数据:%d\n", item.data);
	}
	Destroy(&head);
return 0;
}


编写CMakeLists.txt


cmake_minimum_required(VERSION 3.16)

project(Demo)
set(APP_NAME test)
add_executable(${APP_NAME}  test.c )

执行 cmake .

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

再执行 make

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FW_G8Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值