26.1 链式队列作业

1.代码实现链式队列,输入数据入队,输入字符出队。

test.c

#include <stdio.h>
#include "linkqueue.h"

int main(int argc, const char *argv[])
{
	linkqueue *lq;
	int value;

	lq = queue_create();
	if(lq == NULL){
		return -1;
	}
	
	printf("nums join,char out queue:\n");
	printf("input:");	
	while(scanf("%d",&value)){
		queue_insert(lq,value);
		printf("input:");
	}
	while(!queue_empty(lq)){
		printf("%d\n",queue_delete(lq));
	}
		
	//queue_free(lq);
	return 0;
}

linkqueue.h

#ifndef _LINKQUEUE_
#define _LINKQUEUE_

typedef int data_t;
typedef struct node{
	data_t data;
	struct node *next;
}listnode,*linklist;

typedef struct {
	linklist front;
	linklist rear;

}linkqueue;
linkqueue *queue_create();
int queue_free(linkqueue *lq);
int queue_insert(linkqueue *lq,int data);
int queue_delete(linkqueue *lq);
int queue_empty(linkqueue *lq);
#endif

linkqueue.c

#include <stdio.h>
#include <stdlib.h>
#include "linkqueue.h"

linkqueue *queue_create()
{
	linkqueue *lq;
	linklist p;
	
	
	p = (linklist)malloc(sizeof(listnode));
	if(NULL == p){
		return NULL;
	}
	p->data =0;
	p->next = NULL;
	
	lq = (linkqueue *)malloc(sizeof(linkqueue));
	if(NULL == lq){
		return NULL;
	}
	lq->front = lq->rear = p;
	return lq;
}

int queue_insert(linkqueue *lq,int data)
{
	linklist new;
	new = (linklist)malloc(sizeof(listnode));
	if(NULL == new){
		return -1;
	}
	new->data = data;
	new->next = NULL;
		
	lq->rear->next = new;
	lq->rear = new;
	
	return 0;

}
int queue_delete(linkqueue *lq)
{
	linklist p;
	if(lq == NULL){
		return -1;
	}

	p = lq->front;
	lq->front = p->next;
	free(p);
	p = NULL;
		
	return (lq->front->data);
}

int queue_empty(linkqueue *lq)
{

	return (lq->front == lq->rear ? 1:0);

}
int queue_free(linkqueue *lq)
{
	if(lq == NULL){
		return -1;
	}
	while(lq->front){
		queue_delete(lq);
	}
	free(lq);
}

注意:创建的时候申请两次内存,释放的时候也要释放两次。队尾插入,队头删除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值