华清远见20220801班作业

typedef int dattaype;
//定义结构体
typedef struct Node
{
	union{
		datatype data;  //普通结点数据域
		int len;    //头结点数据域
};
	struct Node *next;
}Node;
//定义链队的结构体
typedef struct
{
	Node *L;  //表示整条链表
	Node *tail; //记录尾结点的指针
}LinkQueue, *LinkQueuePointer;
//创建
LinkQueuePointer queue_create();

//判空
int queue_empty(LinkQueuePointer LQ);

//入队
int push(LinkQueuePointer LQ,dattaype e);

//遍历
void queue_show(LinkQueuePointer LQ)

//出队
int pop(LinkQueuePointer LQ)

//销毁
void queue_free(LinkQueuePointer LQ);
ubuntu@ubuntu:four3$ cat akko.c
#include<stdilb.h>
#include<stdio.h>
#include"akko.h"

//创建
LinkQueuePointer queue_create();
{
	//给队列申请空间
	LinkQueuePointer LQ = (LinkQueuePointer)malloc(sizeof(inkQueue));
	if(NULL == LQ)
	{
		printf("创建失败\n");
		return NULL;
		//此刻,LQ->L和LQ->tail是两个野指针
		//给LQ->L申请一个头结点,让其表示整个链表+
	}
	LQ-> = (Node*)malloc(sizeof(Node));
	if(LQ-> ==NULL)
	{
		printf("创建链表失败\n");
		return NULL;
	}
	//链表初始化
	LQ->L->len = 0;
	LQ->L-next = NULL;

	//尾指针也指向头结点
	LQ->tail = LQ->L
		printf("创建成功\n");
	return LQ;

}
//判空
int queue_empty(LinkQueuePointer LQ);
{
	return LQ->L==LQ->tail;

}

//入队
int push(LinkQueuePointer LQ,dattaype e);
{
	//判断逻辑
	if(NULL ==LQ || NULL==LQ->L)
	{
		printf("插入失败\n");
		return -1;
	}
	//申请结点封装数据
	Node *p = (Node *)malloc(sizeof(Node));
	if(NULL ==p)
	{
		printf("申请结点失败\n");
		return -2;
	}
	p->data = e;
	p->next = NULL;

	//插入逻辑
	LQ->tail->next = p;    //将新结连接到队尾指针
	LQ->tail = p;          //新队伍尾1指针

	//表的变化
	LQ->L->len++;
	printf("插入成功\n");
	return 0;
	
}

//遍历
void queue_show(LinkQueuePointer LQ)
{
	//判断逻辑
	if(NULL==LQ || queue_empty(LQ))
	{
		printf("遍历失败\n");
	}
}

//出队
int pop(LinkQueuePointer LQ)
{
	//判断逻辑
	if(NULL==LQ || queue_empty(LQ))
	{
		printf("出队失败\n");
		return -1;
	}
	//删除逻辑
	Node *p = LQ->L->next;
	LQ->L->next = p->next;
	printf("%d出队成功\n");

	free(p);
	p = NULL;

	//表的变化
	LQ->L->len--;
	//判断是否全部出队后,需要把尾指针重新指向头结点
	if(LQ->L->next == NULL)
	{
		LQ->tail = LQ->L;
	}
	return 0;
}

//销毁
void queue_free(LinkQueuePointer LQ);
{
	//判断逻辑
	if(NULL==LQ)
	{
		printf("销毁失败")
			return;
	}
	//	判断队伍合法但是链表不合法
	if(LQ->L == NULL)
	{
		free(LQ);
		LQ = NULL;
		return;
	}
	//销毁所有结点
	while(!queue_empty(LQ))
	{
		pop(LQ);
	}
	//销毁头结点
	free(LQ->L);
	//销毁队列
	free(LQ);
	LQ = NULL;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值