版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_42259578 https://blog.csdn.net/qq_42259578/article/details/84330557
结构体:
结点结构体
typedef struct TreeNODE
{
char date;
struct TreeNODE *next;
}Queue;
队头、尾结构体:
typedef struct
{
Queue *front;
Queue *rear;
}Piont;
初始化
//初始化
void chongqueue(Piont *p)
{
p->front=NULL;
p->rear=NULL;
}
使队列头尾指针指向都为NULL
入栈
oid inqueue(Piont *p,char x)
{
Queue *u;
u=(Queue*)malloc(sizeof(Piont));
u->date=x;
u->next=NULL;
if(p->rear!=NULL)
{
p->rear->next=u; //
p->rear=u; //将队尾指针指向新插入的节点上
}
if(p->front==NULL)
{
p->front=u;
}
}
构建一个结点,将一个元素入栈所以队头指针指向第一个元素,此时rear指向第一个不为空的结点,当第二个元素进站时,就可以将结点赋值给rear->next,然后将队尾指针指向第二个结点。
下面是顺序结构
出栈
int deleteQueue(Piont *p,char *ch)
{
Queue *q;
if(p->front==NULL)
{
printf("队列为空\n");
return 0;
}
else{
*ch =p->front->date;
q =p->front;
p->front=p->front->next;
if(p->front==NULL)
{
p->rear=NULL;
}
free(q);
return 1;
}
}
新建一个结点指针,让此结点也指向栈顶元素,然后让头指针指向下一个结点,free掉新建的结点;而当删除最后一个结点,要使队尾指针为空。
获取栈顶元素
char getQueue(Piont *p)
{
char ch;
if(p->front==NULL)
{
printf("队列为空\n");
return 0;
}
else{
ch = p->front->date;
return ch;
}
}
main函数
int main()
{
Piont p; //二级指针指向指针,指针指向结构体变量或普通变量
char x;
chongqueue(&p);
inqueue(&p,'A');
inqueue(&p,'B');
inqueue(&p,'D');
x=getQueue(&p);
printf("%c\n",x);
return 0;
}
完整代码
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNODE
{
char date;
struct TreeNODE *next;
}Queue;
typedef struct
{
Queue *front;
Queue *rear;
}Piont;
//初始化
void chongqueue(Piont *p)
{
p->front=NULL;
p->rear=NULL;
}
//入栈
void inqueue(Piont *p,char x)
{
Queue *u;
u=(Queue*)malloc(sizeof(Piont));
u->date=x;
u->next=NULL;
if(p->rear!=NULL)
{
p->rear->next=u; //
p->rear=u; //将队尾指针指向新插入的节点上
}
if(p->front==NULL)
{
p->front=u;
}
}
//出栈
int deleteQueue(Piont *p,char *ch)
{
Queue *q;
if(p->front==NULL)
{
printf("队列为空\n");
return 0;
}
else{
*ch =p->front->date;
q =p->front;
p->front=p->front->next;
if(p->front==NULL)
{
p->rear=NULL;
}
free(q);
return 1;
}
}
//取队头元素
char getQueue(Piont *p)
{
char ch;
if(p->front==NULL)
{
printf("队列为空\n");
return 0;
}
else{
ch = p->front->date;
return ch;
}
}
int main()
{
Piont p; //二级指针指向指针,指针指向结构体变量或普通变量4r-
char x;
chongqueue(&p);
inqueue(&p,'A');
inqueue(&p,'B');
inqueue(&p,'D');
x=getQueue(&p);
printf("%c\n",x);
return 0;
}