C语言实现链式队列

一、代码

  • #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    #define N 15
    typedef struct 
    {
    	int data[N];  //队列数组;
    	int head;  //队头;
    	int tail;  //队尾;
    }SeqQueue;
    
    SeqQueue *SeqQueueInit()  //队列的初始化;
    {
    	SeqQueue *q;
    	q=(SeqQueue *)malloc(N*sizeof(SeqQueue));
    	q->head=0;  //设置队头;
    	q->tail=0;  //设置队尾;
    	return q;
    }
    
    void SeqQueueFree(SeqQueue *q)  //释放队列;
    {
    	if(q!=NULL)
    		free(q);
    }
    
    int SeqQueueIsEmpty(SeqQueue *q)  //判断队列是否为空;
    {
    	return (q->head==q->tail);
    }
    
    int SeqQueueIsFull(SeqQueue *q)  //判断队列是否为满;
    {
    	return (q->tail==N);
    }
    
    void SeqQueueLen(SeqQueue *q)  //获取队列的长度;
    {
    	printf("队列的长度为:%d\n",q->tail-q->head);
    }
    
    void SeqQueueIn(SeqQueue *q)  //顺序队列的入队函数;
    {
    	if(q->tail==N)
    	{
    		printf("队列为满!!!!\n");
    		return ;
    	}
    	else
    	{
    		int data;
    		printf("输入要入队的元素:");
    		scanf("%d",&data);
    		q->data[q->tail++]=data;
    		return ;
    	}
    }
    
    void SeqQueueOut(SeqQueue *q)  //出队操作;
    {
    	if(q->head==q->tail)
    	{
    		printf("队列为空!!!!\n");
    		return ;
    	}
    	else
    	{
    		q->data[q->head++];
    		return ;
    	}
    }
    
    void SeqQueueGet(SeqQueue *q)  //获取队头元素,并输入;
    {
    	if(SeqQueueIsEmpty(q))
    	{
    		printf("队列空了!!!!\n");
    		return ;
    	}
    	else
    		printf("队头元素为:%d\n",q->data[q->head]);
    }
    
    void Operation()     //可进行的操作
    {
    	printf("所有操作如下:\n");
    	printf("(1)采用链式存储实现队列的入队操作。\n");
    	printf("(2)采用链式存储实现队列的出队操作。\n");
    	printf("(3)采用链式存储实现获取队头操作。\n");
    	printf("(4)采用链式存储实现获取队列长度的操作。\n");
    	printf("(-1)退出\n");
    	printf("请选择:\n");
    }
    int main(void)
    {	
    	int m;
    	SeqQueue *q=SeqQueueInit();
    	Operation();
    	do {
    		printf("请输入要进行的操作:");
    		scanf("%d",&m);
    		switch(m)
    		{
    			case 1:
    				SeqQueueIn(q);
    				break;
    			case 2:
    				SeqQueueOut(q);
    				break;
    			case 3:
    				SeqQueueGet(q);
    				break;
    			case 4:
    				SeqQueueLen(q);
    				break;
    		}
    	}while(m!=-1);
    	return 0;
    }

二、实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值