思维导图
作业
链队
queuelink.h
#ifndef __QUEUELINK_H__
#define __QUEUELINK_H__
#include <stdio.h>
#include <stdlib.h>
typedef int Datatype;
typedef struct node
{
union
{
int len;
Datatype data;
};
struct node *next;
}Node;
typedef struct queue
{
Node *Head;
Node *Tail;
}queueLink,*queueLinkPtr;
//创建
queueLinkPtr create();
//判空
int empty(queueLinkPtr QL);
//入队
int push(queueLinkPtr QL,Datatype e);
//遍历
void show(queueLinkPtr QL);
//出队
int pop(queueLinkPtr QL);
//长度
int size_queuelink(queueLinkPtr QL);
//销毁
void freeQ(queueLinkPtr QL);
#endif
queuelink.c
#include "queuelink.h"
//创建
queueLinkPtr create()
{
//在堆区申请链队的大小空间
queueLinkPtr QL = (queueLinkPtr)malloc(sizeof(queueLink));
if(NULL == QL)
{
printf("申请链队失败!\n");
return NULL;
}
//在堆区申请节点的大小空间
QL->Head = (Node *)malloc(sizeof(Node));
if(NULL == QL->Head)
{
printf("申请节点失败!\n");
free(QL);
return NULL;
}
QL->Head->len = 0; //头结点的数据域为0
QL->Head->next = NULL;
QL->Tail = QL->Head;
printf("创建成功!\n");
return QL;
}
//判空
int empty(queueLinkPtr QL)
{
//判断链队是否合法
if(NULL == QL)
{
printf("判空失败\n");
return 0;
}
return QL->Head == QL->Tail;
}
//入队
int push(queueLinkPtr QL,Datatype e)
{
if(NULL == QL)
{
printf("入队失败\n");
return 0;
}
//申请节点,封装数据
Node *p = (Node *)malloc(sizeof(Node));
if(NULL == p)
{
printf("申请节点失败\n");
return 0;
}
p->data = e;
p->next = NULL;
QL->Tail->next = p;
QL->Tail = p;
QL->Head->len++;
return 1;
}
//遍历
void show(queueLinkPtr QL)
{
if(NULL ==QL || empty(QL))
{
printf("遍历失败!\n");
return;
}
//定义一个遍历节点的指针
Node *q = QL->Head;
while(q->next != NULL)
{
q=q->next;
printf("%d ", q->data);
}
printf("\n");
}
//出队
int pop(queueLinkPtr QL)
{
if(NULL == QL || empty(QL))
{
printf("出队失败\n");
return 0;
}
printf("%d出队\n",QL->Head->next->data);
Node *q=QL->Head->next;
QL->Head->next=q->next;
free(q);
q=NULL;
QL->Head->len--;
}
//队列长度
int size_queuelink(queueLinkPtr QL)
{
if(QL==NULL)
{
printf("计算失败\n");
return -1;
}
return QL->Head->len;
}
//销毁
void freeQ(queueLinkPtr QL)
{
if(QL==NULL)
{
printf("销毁失败\n");
return;
}
while(QL->Head->next!=NULL)
pop(QL);
free(QL->Head);
QL->Head=NULL;
free(QL);
QL=NULL;
printf("销毁成功\n");
}
main.c
#include "queuelink.h"
int main()
{
//创建
queueLinkPtr QL = create();
//入队
push(QL,10);
push(QL,20);
push(QL,30);
push(QL,40);
push(QL,50);
//遍历
show(QL);
//求队列长度
int sum = size_queuelink(QL);
printf("%d\n",sum);
//出队
pop(QL);
show(QL);
pop(QL);
show(QL);
//销毁
freeQ(QL);
}