基于visual Studio2013解决算法导论之022队列实现(基于链表)




题目

基于链表的队列实现


解决代码及点评

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include<assert.h>

typedef struct QNode
{
	int nValue;
	struct QNode *pNext;

}QNode, *PQNode;

typedef struct 
{
	PQNode pHead;
	PQNode pTail;
}LinkQueue;

void Create(LinkQueue *pLink)
{
	PQNode pTmp = (PQNode)malloc(sizeof(QNode));
	pLink->pHead = pLink->pTail = pTmp;
	if (pLink == NULL)
	{
		exit(0);
	}
	pLink->pHead->pNext = NULL;
	pLink->pHead->nValue = 0;
}

void EnQueue(LinkQueue *pLink, int nValue)
{
	PQNode pTmp = (PQNode)malloc(sizeof(QNode));
	pTmp->nValue = nValue;
	pTmp->pNext = NULL;

	pLink->pTail->pNext = pTmp;
	pLink->pTail = pTmp;
}

int DeQueue(LinkQueue *pLink)
{
	if (pLink->pHead == pLink->pTail)
	{//队列为空
		printf("队列为空,无法出队!\n");
	}
	PQNode pTmp = pLink->pHead->pNext;
	pLink->pHead->pNext = pTmp->pNext;

	if (pLink->pTail == pTmp)
	{//若队列中只有一个元素,则出队后要修改队尾指针
		pLink->pTail = pLink->pHead;
	}
	int nValue = pTmp->nValue;
	free(pTmp);
	pTmp = NULL;

	return nValue;
}

bool IsEmpty(LinkQueue *pLink)
{
	return pLink->pHead == pLink->pTail;
}

void DestroyQueue(LinkQueue *pLink)
{
	while (pLink->pHead != NULL)
	{
		pLink->pTail = pLink->pHead->pNext;
		free(pLink->pHead);
		pLink->pHead = pLink->pTail;
	}
}
int main()
{
	LinkQueue *pLink = (LinkQueue *)malloc(sizeof(LinkQueue));
	Create(pLink);
	int i;
	for (i = 0; i < 10; i++)
	{
		EnQueue(pLink, i);
	}

	for (i = 0; i < 10; i++)
	{
		printf("%d ", DeQueue(pLink));
	}

	DestroyQueue(pLink);
	system("pause");
	return 0;
}


代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6858815

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









转载于:https://www.cnblogs.com/niulanshan/p/6175047.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值