#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ERROR -1
#define OK 0
typedef char* ElemType;
typedef struct Qnode
{
ElemType data;
struct Qnode* next;
}Qnode, *QnodePtr;
typedef struct LinkQueue
{
Qnode* front;
Qnode* rear;
};
LinkQueue* create_queue()
{
LinkQueue* Q = (LinkQueue*)malloc(sizeof(LinkQueue));
if (Q == NULL)
{
return NULL;
}
Q->front = (QnodePtr)malloc(sizeof(Qnode));
if (NULL == Q->front) {
return NULL;
}
Q->rear = (QnodePtr)malloc(sizeof(Qnode));
if (NULL == Q->rear) {
return NULL;
}
Q->front = Q->rear;
Q->front->next = NULL;
return Q;
}
int is_queue_empty(LinkQueue* Q)
{
return ((Q->front == NULL) && (Q->rear == NULL));
}
int destory_queue(LinkQueue* Q)
{
while (Q->front)
{
Q->rear = Q->front->next;
free(Q->front);
Q->front = Q->rear;
}
return OK;
}
int insert_queue(LinkQueue* Q, ElemType e)
{
QnodePtr p = (QnodePtr)malloc(sizeof(Qnode));
if (NULL == p)
return NULL;
p->data = e;
p->next = NULL;
if (is_queue_empty(Q))
{
Q->front = Q->rear = p;
}
else
{
Q->rear->next = p;
Q->rear = p;
}
return OK;
}
ElemType pop_queue(LinkQueue* Q)
{
if (is_queue_empty(Q))
{
return NULL;
}
Qnode* p = Q->front->next;
char* tmp =(char*)malloc(sizeof(char));
if (tmp == NULL)
return NULL;
strcpy(tmp, p->data);
Q->front->next = p->next;
if (Q->rear == p)
{
Q->rear = Q->front;
}
free(p);
return tmp;
}
int main()
{
LinkQueue* Q = create_queue();
char msg[3][10] = { "wang", "tao", "huang" };
for (int i = 0; i < 3; i++)
{
insert_queue(Q, msg[i]);
}
while (!is_queue_empty(Q))
{
char* tmp = pop_queue(Q);
printf("%s\n", tmp);
}
destory_queue(Q);
return 0;
}
链队列实现字符串的读写
最新推荐文章于 2021-07-23 14:11:52 发布