数据结构------链队列------(C语言实现)

链队列的基本操作:

和顺序表队列差不多啊,都队头出,队尾入,操作也没有什么难度昂,简简单单。

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

typedef struct Element{				//同样的先定义数据域的类型 
	int id;
	char name[250];
}Element;

typedef struct Node{				//定义节点 
	Element data;					//数据域 
	struct Node* next;				//指针域 
}QueueNode;

typedef struct Linkqueue{				//定义队列 
	QueueNode* front;				//队头 
	QueueNode* rear;					//队尾
	int length;						//队列长度 
}Linkqueue;


Element datas[] ={
	{1,"大帅比1"},
	{2,"大帅比2"},
	{3,"大帅比3"},
};


//初始化队列 
void InitLinkqueue(Linkqueue* linkqueue);

//入队操作 
void Pushlinkqueue(Linkqueue* linkqueue,Element data);

//出队操作 
void Poplinkqueue(Linkqueue* linkqueue);

//打印队列
void Printlinkqueue(Linkqueue* linkqueue); 

int main(void) 
{	
	Linkqueue linkqueue;							//创建一个链队列 
	InitLinkqueue(&linkqueue);						//初始化链队列 
	int i;				
	for(i=0;i<3;i++)
	{
		Pushlinkqueue(&linkqueue,datas[i]);			//入队操作 
	}
	Printlinkqueue(&linkqueue);						//打印队列
	Poplinkqueue(&linkqueue);									//出队操作 
	Printlinkqueue(&linkqueue);						//打印队列
	return 0;
}

//初始化队列 
void InitLinkqueue(Linkqueue* linkqueue)
{
	linkqueue->length = 0;										//把队列长度初始化为0 
	linkqueue->front = (QueueNode*)malloc(sizeof(QueueNode));	//把队头指向空结点 
	linkqueue->rear = linkqueue->front;							//把队尾指向队头,表示一个元素也没有 
	if(!linkqueue->front)										//判断有没有指向为空 
	{
		printf("初始化失败!\n");
		return;
	}
}

//入队操作 
void Pushlinkqueue(Linkqueue* linkqueue,Element data)
{
	//首先要申请内存,存储要插入的元素
	QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));
	if(newnode)
	{
		newnode->data = data;
		//printf("%d %s\n",newnode->data.id,newnode->data.name);
	} 
	else
	{
		printf("申请内存失败\n");
		return;
	}
	//然后插入在队尾
	linkqueue->rear->next = newnode;			//把队尾所在内存的指针域指向新节点 
	//printf("%d %s\n",linkqueue->rear->next->data.id,linkqueue->rear->next->data.name);
	linkqueue->rear = newnode;					//队尾指针指向新节点,方便下一次插入
	linkqueue->rear->next = NULL;				//指针域指向空 
}

//出队操作 
void Poplinkqueue(Linkqueue* linkqueue)
{
	QueueNode* node;							//用来过渡,删掉第一个节点
	node = linkqueue->front->next;				//指向队首 
	linkqueue->front->next = node->next;		//指向队首的后一个元素
	free(node);									//释放队首的空间 
}

//打印队列
void Printlinkqueue(Linkqueue* linkqueue)
{
	QueueNode* currnode = linkqueue->front->next;		//指向头结点的下一个节点 
	while(currnode)										//循环打印 
	{
		printf("%d %s\n",currnode->data.id,currnode->data.name);
		currnode=currnode->next;
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值