zoukankan      html  css  js  c++  java
  • C语言实现队列基本操作-初始化,入队,出队,打印,删除

    C语言实现队列基本操作-初始化,入队,出队,打印,删除

    C语言:

    #include <stdio.h> 
    #include <stdlib.h>
    
    // 队列的实现
    #define OVERFLOW -2 
    #define OK 1
    #define ERROR 0
    
    typedef int Status;
    typedef int QElemType;
     
    typedef struct QNode{
    	QElemType data;
    	struct QNode * next;
    }QNode, *QueuePtr;
    typedef struct {
    	QueuePtr front;            // 队头指针 
    	QueuePtr rear;             // 队尾指针 
    }LinkQueue;
    
    Status InitQueue(LinkQueue &Q)
    {
    	// 构造一个空队列
    	Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
    	if(!Q.front) exit(OVERFLOW);         // 分配存储失败 
    	Q.front->next = NULL;
    	return OK;
    }
    
    Status DestroyQueue(LinkQueue &Q)
    {
    	// 销毁队列 Q
    	while(Q.front){
    		Q.rear = Q.front->next;
    		free(Q.front);
    		Q.front = Q.rear;
    	} 
    	return OK;
    }
    
    Status EnQueue(LinkQueue &Q, QElemType e)
    {
    	// 插入元素 e 为 Q 的新的队列元素 
    	QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
    	if(!p) exit(OVERFLOW);          // 存储分配失败
    	p->data = e;
    	p->next = NULL;                // 队尾 next == NULL,有 data 
    	Q.rear->next = p;
    	Q.rear = p;                    // 更新队尾 
    	return OK; 
    }
    
    Status DeQueue(LinkQueue &Q, QElemType &e)
    {
    	// 若对头不空,则删除对头元素,用 e 返回其值,并返回 OK,否则返回 ERROR
    	if(Q.front == Q.rear) return ERROR;
    	QueuePtr p = Q.front->next;         // Q.front 没有 data, next != NULL(除非空队列) 
    	e = p->data;
    	Q.front->next = p->next;            // 更新队头 
    	if(Q.rear == p) Q.rear = Q.front;   // 队列为空了 
    	free(p);
    	return OK;
    }
    
    Status PrintQueue(LinkQueue Q)
    {
    	// 打印队列 Q 全部元素 
    	QueuePtr p = Q.front;
    	while(p->next){
    		printf("%d  ", p->next->data);
    		p = p->next;
    	}
    	printf("
    "); 
    }
    int main()
    {
    	LinkQueue q;
    	InitQueue(q);       // 初始化队列
    	
    	QElemType e1 = 666, e2 = 888;    // 向队列添加元素 
    	EnQueue(q, e1);
    	EnQueue(q, e2);
    	printf("队列元素:  "); 
    	PrintQueue(q);        // 打印队列 
    	
    	QElemType e3;
    	DeQueue(q, e3);
    	printf("删除元素为: %d 
    ", e3);
    	printf("队列元素:  "); 
    	PrintQueue(q);        // 打印队列 	
    	
    	DestroyQueue(q);      // 删除队列 
    	
    	return 0;
    }
    /* Code Running Results
    队列元素:  666  888
    删除元素为: 666
    队列元素:  888
    */
    

    栈和单链线性表基本操作实现:

    单链线性表

  • 相关阅读:
    C# SqlDataAdapter
    数据库游标
    什么是DooPHP Framework ?
    健康世界官方网站绿色健康知识门户网站源码www.jiankangshijie.com
    蓝色教程资讯、软件下载网站风格全套织梦模板
    分享一本正在看的电子书,相当不错
    DooPHP中国官方微博
    DooPHP Framework 中文手册 v1.2
    吉林织梦网络公司网站风格模板 www.thinkphp.biz
    CSS HACK:IE6、IE7、IE8、Firefox兼容性问题解决方案
  • 原文地址:https://www.cnblogs.com/jiaohuadehulike/p/14295020.html
Copyright © 2011-2022 走看看