头文件
typedef char QueueType;
typedef struct QueueNode
{
struct QueueNode* next;
QueueType data;
}QueueNode;
//创建新节点
QueueNode* QueueCreat(QueueType value);
//初始化
void QueueInit(QueueNode** pphead);
//打印
void QueuePrint(QueueNode* phead,const char *s);
//入队
void QueuePush(QueueNode** pphead,QueueType value);
//出队列
void QueuePop(QueueNode** pphead);
//取队首元素
int QueueTop(QueueNode* phead,QueueType* value);
//销毁队列
void QueueDestory(QueueNode** pphead);
具体实现
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "linkqueue.h"
//创建节点
QueueNode* QueueCreat(QueueType value)
{
//申请内存
QueueNode* newnode=(QueueNode*)malloc(sizeof(QueueNode));
assert(newnode);
newnode->data=value;
newnode->next=NULL;
return newnode;
}
//初始化
void QueueInit(QueueNode** pphead)
{
assert(pphead);
*pphead=NULL;
}
//打印
void QueuePrint(QueueNode* phead,const char *s)
{
if( phead==NULL)
{
return;
}
printf("%s\n",s);
//定义一个节点,遍历队列打印
QueueNode *cur=phead;
while( cur)
{
printf("%c->",cur->data);
cur=cur->next;
}
printf("NULL\n");
}
入队列
void QueuePush(QueueNode** pphead,QueueType value)
{
//非法输入
if( pphead==NULL)
{
return ;
}
//队列为空,直接构造节点,插入队列
else if( *pphead==NULL)
{
*pphead=QueueCreat(value);
}
//正常情况,找到队尾,申请新节点,插入队尾
else
{
QueueNode* cur=*pphead;
while(cur->next!=NULL)
{
cur=cur->next;
}
cur->next=QueueCreat(value);
}
}
//出队列
void QueuePop(QueueNode** pphead)
{
//非法输入
if( pphead==NULL)
{
return ;
}
//空队列无法完成出队列操作
else if( *pphead==NULL)
{
printf("queue is empty\n");
return;
}
//非空队列,更新队首节点
else
{
QueueNode* cur=(*pphead)->next;
free(*pphead);
*pphead=cur;
}
}
//取队首元素,成功返回1,失败返回0
int QueueTop(QueueNode* phead,QueueType* value)
{
if(phead==NULL)
{
return 0 ;
}
//队首元素值由value带回
*value=(phead->data);
return 1;
}
//销毁队列
void QueueDestory(QueueNode** pphead)
{
if( pphead==NULL)
{
return ;
}
//遍历队列,依次销毁
QueueNode* cur=*pphead;
for( ;cur!=NULL;cur=cur->next)
{
cur=next;
}
//将头结点置为空
*pphead=NULL;
}
(由于bug还没有修复,销毁没有得出结果,后续更新)
由*value=phead->data引发的错误
- linkqueue.c:170: warning: initialization makes integer from pointer without a cast
linkqueue。c:170:警告:初始化使整数从指针变为整数。
定义char value时将value初始化成NULL
- linkqueue.c:92: error: subscripted value is neither array nor pointer
linkqueue。c:92:错误:下标值既不是数组也不是指针。linkqueue。c:92:错误:下标值既不是数组也不是指针。
错误引用value,把data当成指针类型了
*value=phead->data[0]
- linkqueue.c:92: warning: assignment makes pointer from integer without a cast
linkqueue。c:92:警告:赋值使指针从整数开始,而不需要转换。
value=phead->data
“`