C 語言queue

// main.h
#ifndef MAIN_H
#define MAIN_H

struct queue{
	void* data;
	struct queue* next;
};


struct queue_cell{
	struct queue *tail;
	struct queue *top;
};
	
struct queue_cell* queue_new(void);
void queue_free(struct queue_cell*);
int queue_push(struct queue_cell*,void*);
int queue_push_front(struct queue_cell*,void*);
void queue_pop(struct queue_cell*);
void* queue_top(struct queue_cell*);
void* queue_tail(struct queue_cell*);
int queue_empty(struct queue_cell*);
#endif


// main.c
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include "main.h"

struct queue_cell* queue_new(void)
{
	struct	queue_cell* queue = (struct queue_cell*)malloc(sizeof(struct queue_cell));
	if(NULL  == queue)
	{
		return NULL;
	}
	queue->top = queue->tail = NULL;
	return queue;
}


void queue_free(struct queue_cell* queue)
{
	struct queue* p = queue->top;
	if(!queue)
	{
		return ;
	}

	
	while(p)
	{
		struct queue* next = p->next;
		free(p);
		p = next;
	}
	free(queue);
}

int queue_push(struct queue_cell* queue,void* data){
	struct queue*  cell = (struct queue*)malloc(sizeof(struct queue));
	if(NULL == cell)
	{
		return 0;
	}

	cell->data = data;
	cell->next = NULL;

	if(queue->tail)
	{
		queue->tail->next=cell;
		queue->tail=cell;
	}else{
		queue->top=queue->tail=cell;
	}
	return 0;
}


int queue_push_front(struct queue_cell* queue,void* data)
{
	struct queue* cell= (struct queue*)malloc(sizeof(struct queue));

	if(NULL == cell)
	{
		return 0;
	}

	cell->data=data;
	cell->next=queue->top;
	queue->top = cell;

	if(!queue->tail)
	{
		queue->tail=queue->top;
	}	
	return 0;
}
// free
void queue_pop(struct queue_cell* queue){
	// 
	struct queue* top = queue->top;
	queue->top = top->next;

	if(top == queue->tail)
	{
		queue->tail=NULL;
	}
	free(top);
}

// return values;
void* queue_top(struct queue_cell* queue){
	return queue->top->data;
}
void* queue_tail(struct queue_cell* queue){
	return queue->tail->data;
}
int queue_empty(struct queue_cell* queue){
	return queue->top==NULL;
}

int main()
{

	struct queue_cell* queue= NULL;
	int a=1,b=2,c=3;
	queue = queue_new();
	queue_push(queue,&a);
	queue_push_front(queue,&b);
	queue_push(queue,&c);


	printf("%p\r\n",&a);
	printf("%p\r\n",&b);
	printf("%p\r\n",&c);


	queue_free(queue);
	return 0;
}
相關文章
相關標籤/搜索