链队列实现字符串的读写

#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;

}

Guess you like

Origin blog.csdn.net/fly_wt/article/details/108838960