C 基础数据结构---队列 ADT

6 篇文章 0 订阅
4 篇文章 0 订阅

最近闲来无事,不想浪费青春,就动手翻看之前的笔记和书本,将做一些记录

下面是通过C语言实现的队列:


#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
	int data;
	struct Node *next;
}*Node;
typedef struct Queue {
	int size;
	struct Node *first;
	struct Node *end;
}*Queue;

#define MAX_SIZE 10

Queue CreatEmptyQueue()
{
	Queue queue = NULL;
	queue = (Queue)malloc(sizeof(struct Queue));
	if(queue==NULL){
		printf("malloc mem error !\n");
		exit(-1);
	}
	queue->size = 0;
	queue->first = NULL;
	queue->end = NULL;
	return queue;
}

int isEmpty(Queue queue)
{
	assert(queue!=NULL);
	return (queue->size <= 0);
}
int isFull(Queue queue)
{
	assert(queue!=NULL);
	return (queue->size >= MAX_SIZE);
}
int QueueIn(Queue queue,int data)
{
	assert(queue!=NULL);
	Node p = NULL;
	if(isFull(queue)){
		printf("in queue error ! The Queue is full\n");
		return ;
	}
	p = (Node)malloc(sizeof(struct Node));
	if(p == NULL){
		printf("malloc mem error!\n");
		return -1;
	}
	p -> data = data;
	p->next = NULL;
	if(isEmpty(queue) == 1){
		queue->first = p;
		queue->end = p;
	}else{
		queue->end->next = p;
		queue->end = p;
	}
	queue->size = queue->size +1;
	return 0;
}
int QueueOut(Queue queue,int *data)
{
	assert(queue!=NULL&&data!=NULL);
	Node p;
	if(isEmpty(queue)==1){
		printf("Queue is empty !\n");
		return -1;
	}
	p = queue->first;
	*data = p->data;
	queue->first = queue->first->next;
	queue->size = queue->size -1;
	if(isEmpty(queue)==1){
		queue -> end = NULL;
		queue->first = NULL;
	}
	free(p);
	return 0;
	
}
void printQueue(Queue queue)
{
	assert(queue!=NULL);
	printf("queue size id :%d\n",queue->size);
	Node p;
	p = queue->first;
	while(p!=NULL){
		printf(" %d ",p->data);
		p = p->next;
	}
	printf("\n\n");
}
void destoryQueue(Queue queue)
{
	assert(queue!=NULL);
	Node p,q;
	if(isEmpty(queue)!=1){
		q = p = queue->first;
		while(p!=NULL){
			queue ->size = queue->size-1;
			printf("have %d node\n",queue->size);
			q = p->next;
			free(p);
			p = q;
		}
	}
	queue -> first = NULL;
	queue->end = NULL;
	free(queue);
	queue = NULL;
}
int main(int argc,char *argv[])
{
	Queue queue = NULL;
	int data;
	int i;
	int ret;
	printf("Enter main!\n");
	queue = CreatEmptyQueue();
	ret = QueueOut(queue,&data);
	if(ret == 0){
		printf("read success data is :%d\n",data);
	}else{
		printf("The queue is empty ,not havs data\n");
	}
	for(i=0;i<MAX_SIZE+5;i++){
		QueueIn(queue,i*5+10);
	}
	printQueue(queue);
	destoryQueue(queue);
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值