当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » C/C++  » 编程基础
ai0376

队列

ai0376 发布于 2013年11月26日 16时, 1评/458阅
分享到: 
收藏 +0
2
queue
标签: <无>

代码片段(1) [全屏查看所有代码]

1. [文件] main.c ~ 2KB     下载(20)     跳至 [1] [全屏预览]

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//定义队列 
typedef struct node
{
	int data;
	struct node *next;
}Queue;

typedef struct pointer
{
	Queue *front;	//队首 
	Queue *rear;	//队尾 
}QPointer;

//初始化队列 
void QueueInit(QPointer *qp)
{
	Queue *que;
	que = (Queue *)malloc(sizeof(Queue));
	//队首和队尾指向同一个内存空间,指针域为NULL 
	que->next = NULL;
	qp->front = que;
	qp->rear = que;
}

//判断队列是否为空 
int IsEmpty(QPointer *qp)
{
	//队首和队尾指针是否相同 
	if(qp->front == qp->rear)
	{
		return 1;
	}
	return 0;
}

//插入元素到队列 
int QueuePush(QPointer *qp , int element)
{
	Queue *que;
	que = (Queue *)malloc(sizeof(Queue));
	if(que == NULL)	
	{
		return 0;
	}
	que->data = element;
	que->next = NULL;
	qp->rear->next = que;	//节点插入队尾 
	qp->rear=que;		//调整队尾指针 
	return 0;
}

//删除数据元素 
int QueuePop(QPointer *qp , int *element)
{
	Queue *que;
	if(IsEmpty(qp))
	{
		return 0;
	}
	que = qp->front->next;   
	*element = que->data;	//出队元素 
	qp->front->next = que->next;
	//判断是不是只剩下最后一个元素 
	if(qp->rear == que)
	{
		qp->rear = qp->front;
	}
	free(que);
	return 1;
}

int main(int argc, char *argv[]) 
{
	QPointer *qp;
	int x;
	qp = (QPointer *)malloc(sizeof(QPointer));
	QueueInit(qp);
	printf("input positive integers:\n");
	scanf("%d" , &x);
	while(x > 0)
	{
		QueuePush(qp , x);
		scanf("%d",&x);
	}
	
	Queue *p = qp->front->next;
	if(p == NULL)
	{
		return 0;
	}
	printf("queue element:\n");
	while(p)
	{
		printf("%d" , p->data);
		p=p->next;
	}
	printf("\n");
	printf("delete:\n");
	while(QueuePop(qp , &x))
	{
		printf("%d" , x);
	}
	printf("\n");
	p = qp->front;
	free(p);
	free(qp);
	return 0;
}


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(1)

  • 1楼:大汉刺史 发表于 2013-11-26 16:48 回复此评论
    你那个出队列了: front->next = que->next;现在que不是没用了吗,为什么不释放掉呢
开源从代码分享开始 分享代码
ai0376的其它代码 全部(45)...