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;
}
华清远见20220801班作业
最新推荐文章于 2024-09-03 17:22:26 发布