文档章节

C语言队列的各项操作

胡若晨
 胡若晨
发布于 2016/04/02 14:37
字数 478
阅读 64
收藏 3

/*************************************************************************
    > File Name: new_queue.c
    > Author:heathcliff 
    > Mail: ------------------- 
    > Created Time: 2016年04月02日 星期六 13时22分48秒
 ************************************************************************/
#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;
typedef struct node
{
    ElemType data;
    struct node *next;
}que_node;

struct que
{
    que_node *front,*rear; //创建队头、队尾指针
};

int length = 0;//计算队列的长度

void init_queue(struct que *q);
void enter_queue(struct que *q,ElemType x);
ElemType delete_queue(struct que *q);
void print(struct que q);

int main(void)
{
    struct que *q;
    int x,interrupt;

    q = (struct que *) malloc (sizeof(struct que));//此步骤必须有,否则会引起程序崩溃
    init_queue(q);

    printf("\n请输入你想要入对的值,以0结束:");
    scanf("%d",&x);

    while( x != 0){
        enter_queue(q,x);
        scanf("%d",&x);
    }
    print(*q);
    printf("length = %d\n",length);

    printf("请问是否要出对操作:yes (1),no(0)\n");
    scanf("%d",&interrupt);

    while(length){
        if(interrupt == 1){
            x = delete_queue(q);
            printf("\n出对元素为:%d",x);
            printf("\nlength = %d \n",length);

            printf("请问是否继续出对:yes (1),no(0)\n");
            scanf("%d",&interrupt);
            }
        else
            exit(0);
        }

    return 0;
}

void init_queue(struct que *q)
{
    que_node *head; //创建头指针

    head = (que_node *) malloc (sizeof(que_node));

    head->next = NULL;
    q->rear = head;
    q->front = head;
}

/*入对操作*/
void enter_queue(struct que *q ,ElemType x)
{
    que_node *p;

    p = (que_node *) malloc (sizeof(que_node));//分配空间

    p->data = x;//赋值
    /*入对操作在队尾,即rear上进行*/
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;//指针向后移动一位

    length ++ ;
}

/*出对操作*/
ElemType delete_queue(struct que *q)
{
    que_node *p;
    int keep;

    p = (que_node *) malloc (sizeof(que_node));//分配空间
    /*出对操作在队头进行,即front*/
    if(q->front == q->rear){// 队列为空
        printf("队列为空");
        keep = 0;
    }
    else{
        p = q->front->next;
        q->front->next = p->next;//队头后移一位

        if(p->next == NULL)
            q->front = q->rear;
        keep = p->data ;//保存出对元素的值
    }

    length -- ;
    return keep;
}

/*打印队列*/
void print(struct que q)
{
    que_node *p;
    p = (que_node *) malloc (sizeof(que_node));
    p = q.front->next;

    while(p != NULL){
        printf("data = %d\n",p->data);  

        p = p->next;
    }
}



© 著作权归作者所有

胡若晨
粉丝 3
博文 14
码字总数 7894
作品 0
包头
私信 提问
数据结构之守规矩的先进先出的队列(二)

一、队列的概念   队列是一种特殊的线性表,严格按照“先进先出”的原则。 二、队列基础   队列和栈一样只允许在断点处插入和删除元素,其基本操作包括以下:   (1)InitQueue(&Q); ...

时光top
2018/10/28
0
0
传智播客学习笔记 网络多线程

主线程处理UI,避免耗时操作 iOS多线程技术有4种 pthread,通用技术,跨平台 c语言,程序员管理生命周期,几乎不用 NSThread 面向对象,可以直接操作线程 OC语言 程序员 管理生命周期,偶尔使...

云飞扬v5
2015/08/11
40
0
GCD 与 NSOperation 的对比

GCD 将添加到队列(串行/并发/主队列),并且指定任务执行的函数(同步/异步) GCD是底层的C语言构成的API iOS 4.0 推出的,针对多核处理器的并发技术 在队列中执行的是由 构成的任务,这是一个轻...

TaciturnKnightYQ
2016/02/11
65
0
11-数据结构探险系列—队列篇

数据结构探险系列—队列篇 这是c++远征系列的进阶课程。 少了基础语法,对于程序语言的应用,思考。 什么是数据结构? 一群数据集合和数据之间的关系。 是指相互之间存在一种或多种特定关系的...

天涯明月笙
2018/07/25
0
0
基本数据结构 -- 队列(数组实现)

  队列是一种先进先出(FIFO)的线性表。对队列的基本操作有两种: 入队(Enqueue),在表的末端(队尾 tail)插入一个元素;出队(Dequeue),删除或返回在表的开头(队头 head)的元素。...

tongye
04/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

浅谈prototype原型模式

一、原型模式简介 原型(Prototype)模式是一种对象创建型模式,他采取复制原型对象的方法来创建对象的实例。使用原型模式创建的实例,具有与原型一样的数据。 原型模式的特点: 1、由原型对...

青衣霓裳
12分钟前
2
0
shell mysql 备份

#!/bin/bash time2=$(date "+%Y-%m-%d-%H:%M:%S") /usr/local/mysql/bin/mysqldump -uroot -p ad > /usr/local/mysql/backup/"$time2".sql 变量引用原来是这么用的。......

奋斗的小牛
19分钟前
3
0
Jmeter监控Linux服务器操作

系统:Win7 64位 工具:Jmeter 4.0 要准备好的插件:JMeterPlugins-Standard-1.4.0,ServerAgent-2.2.1 解压JMeterPlugins-Standard-1.4.0.zip,将其中\lib\ext\JMeterPlugins-Standard.jar......

魔鬼妹子
20分钟前
4
0
系列文章:云原生Kubernetes日志落地方案

在Logging这块做了几年,最近1年来越来越多的同学来咨询如何为Kubernetes构建一个日志系统或者是来求助在这过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是想把我们这些年积累的经...

Mr_zebra
20分钟前
3
0
入门必备!快速学会用Aspose.Words在表格中插入和删除列!

Aspose.Words For .Net(点击下载)是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft W...

mnrssj
25分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部