• 数据结构---队列单链表实现


    /*
    	队列的实现方式-----------------链式存储方式-----带有头结点的 单链表实现 
    	链表实现队列的一个特点是 不会满 可以一直入栈  但是肯能队列为空 
    */
    #include "stdio.h"
    #include "stdlib.h"
    
    #define ERROR  (1 << 16)  //错误码  有可能跟数据会有冲突 
    
    typedef enum{false,true}bool;
    typedef int ElementType;
    typedef struct _Node{
    	ElementType Data;	  //存储数据 
    	struct _Node * nextNode;//指向下一个结点 
    }Node;
    typedef struct _Queue{
    	struct _Node * nextNode;//指向下一个结点 
    	struct _Node * lastNode;//指向尾部结点 
    }Queue;//在队列的头部删除 尾部插入 
    
    //创建链表只是一个头结点 
    Queue * CreateQueue()
    {
    	Queue * queue = (Queue *)malloc(sizeof(struct _Queue));
    	queue->nextNode = NULL;
    	queue->lastNode = NULL;
    	
    	return queue;
    }
    
    //入队列
    void Enqueue(Queue *queue,ElementType item)
    {
    	Node *node = (Node *)malloc(sizeof(Node));//创建一个结点
    	node->Data = item;
    	node->nextNode = NULL;
    	
    	if(queue->nextNode == NULL)//说明队列为空
    	{
    		queue->nextNode = node;
    		queue->lastNode = node;
    	} 
    	//队列不为空的话 直接将结点插入到链表的后面 
    	queue->lastNode->nextNode = node; 
    	queue->lastNode  = node;
    } 
    //判断队列是不是为空
    bool IsEmpty(Queue *queue)
    {
    	if(queue->nextNode == NULL)//为空 
    		return true;
    	return false;	
    } 
    //出队列  从链表的头部出 
    ElementType Dequeue(Queue *queue)
    {
    	ElementType data;
    	Node * tempNode;
    	if( IsEmpty(queue) )
    	{
    		printf("队列为空
    ");
    		return ERROR;	
    	}
    	else
    	{
    		tempNode = queue->nextNode;
    		data = tempNode->Data;
    		queue->nextNode = tempNode->nextNode; 
    		free(tempNode);//释放资源 
    		return data; 
    	}	
    } 
    
    int main(int argc,const char *argv[])
    {
    	Queue * queue = CreateQueue();
    	int i;
    	for(i = 0;i<7;i++)
    	{
    		Enqueue(queue,i+1);
    	}
    	printf("入栈完毕
    出栈开始
    ");
    	for(i = 0;i<8;i++)//这里故意出现8  是为了检测栈空 
    		printf("queue[%d] = %d
    ",i,Dequeue(queue));
    	return 0;
    }
    
  • 相关阅读:
    Mysql8.0中caching_sha2_password报错解决
    Centos7 安装mysql-8.0.18(rpm)
    如何有效的清理yum缓存
    虚拟机安装后配置IP地址
    正确计算linux系统内存使用率
    Linux 怎样更改locale语言设置
    linux把EDT时间修改为CST格式
    开放接口的安全验证方案(AES+RSA)
    Linux下JDK中文字体乱码
    服务器http请求https服务时报错解决方案
  • 原文地址:https://www.cnblogs.com/newneul/p/7291257.html
Copyright © 2020-2023  润新知