栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构09-链队列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构09-链队列

 同类型结点分配在相邻空间
Start testing.In initQueue, the address of resultPtr is 2293208
The value of resultPtr is 2521728
The address of headerPtr is 2293200
The value of headerPtr is 2521760
局部变量的空间能重复利用
Start testing.In initQueue, the address of resultPtr is 2293208

In linkEnqueue, the address of tempNodePtr is 2293208

指针变量的值(指针的值),指的是指针本身的值 ; 指针地址,指的是指针的地址值 ,这个地址代表的内存,存储的是指针的值。

入队和出队图示

 

完整代码
#include
#include

typedef struct LinkNode{
	int data;
	LinkNode* next;
}*LinkNodePtr;

typedef struct LinkQueue{
	LinkNodePtr front;
	LinkNodePtr rear;
}*LinkQueuePtr;

LinkQueuePtr iniQueue(){
	LinkQueuePtr result = (LinkQueuePtr)malloc(sizeof(LinkQueue));
	LinkNodePtr header = (LinkNodePtr)malloc(sizeof(LinkNodePtr));
	header->next = NULL;
	
	result->front = header;
	result->rear = header;
	return result;
}

void printLinkQueue(LinkQueuePtr pQueuePtr){
	LinkNodePtr tempPtr = pQueuePtr->front->next;
	while(tempPtr != NULL){
		printf("%d",tempPtr->data);
		tempPtr = tempPtr->next;
	}
	printf("n");
}

void enqueue(LinkQueuePtr pQueuePtr,int pElement){
	LinkNodePtr tempNodePtr = (LinkNodePtr)malloc(sizeof(LinkNodePtr));
	tempNodePtr->data = pElement;
	tempNodePtr->next = NULL;
	
	pQueuePtr->rear->next = tempNodePtr;
	pQueuePtr->rear = tempNodePtr;
}

int dequeue(LinkQueuePtr pQueuePtr){
	int resultValue;
	LinkNodePtr tempNodePtr;
	
	if(pQueuePtr->front == pQueuePtr->rear){
		printf("The queue is empty.n");
		return -1;
	}
	
	tempNodePtr = pQueuePtr->front->next;
	resultValue = tempNodePtr->data;
	pQueuePtr->front->next = pQueuePtr->front->next->next;
	
	
	if(pQueuePtr->rear == tempNodePtr){
		pQueuePtr->rear = pQueuePtr->front;
	}
	
	free(tempNodePtr);
	
	return resultValue;
}

void testLinkQueue(){
	LinkQueuePtr tempQueuePtr;
	tempQueuePtr = iniQueue();
	enqueue(tempQueuePtr,10);
	enqueue(tempQueuePtr,30);
	enqueue(tempQueuePtr,50);
	
	printLinkQueue(tempQueuePtr);
	
	printf("dequeue gets %dn",dequeue(tempQueuePtr));
	printf("dequeue gets %dn",dequeue(tempQueuePtr));
	printf("dequeue gets %dn",dequeue(tempQueuePtr));
	printf("dequeue gets %dn",dequeue(tempQueuePtr));
	
	enqueue(tempQueuePtr,8);
	printLinkQueue(tempQueuePtr);
}

int main(){
	testLinkQueue();
	return 0;
}
运行结果
10 30 50
dequeue gets 10
dequeue gets 30
dequeue gets 50
The queue is empty.
dequeue gets -1
8

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892615.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号