zoukankan      html  css  js  c++  java
  • 数据结构---队列单链表实现

    /*
    	队列的实现方式-----------------链式存储方式-----带有头结点的 单链表实现 
    	链表实现队列的一个特点是 不会满 可以一直入栈  但是肯能队列为空 
    */
    #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;
    }
    
  • 相关阅读:
    剑指 Offer 30. 包含min函数的栈
    剑指 Offer 12. 矩阵中的路径
    剑指 Offer 11. 旋转数组的最小数字
    剑指 Offer 04. 二维数组中的查找
    LeetCode——139. 单词拆分
    LeetCode——(每日一题)恢复空格
    MySQL专职DBA博客目录-周万春
    MySQL专职DBA,微信群,技术群,交流群,开车群
    DBA生产经验总结
    创建MySQL账户
  • 原文地址:https://www.cnblogs.com/newneul/p/7291257.html
Copyright © 2011-2022 走看看