文档章节

栈、队列、链表

Ethan-GOGO
 Ethan-GOGO
发布于 2016/10/25 10:00
字数 497
阅读 3
收藏 0

1.队列

title:一串数字,每次都把开头的数删除,第二个数放到队尾巴,按这样的删除的数字顺序是什么

struct queue
{
    int data[100];//队列的主体,用来存储内容
    int head;//队首
    int tail;//队尾
};



int main(int argc, const char * argv[]) {

    
    struct queue q;
    int i;
    
    //初始化队列
    q.head = 1;
    q.tail = 1;
    for (i = 1; i <= 9; i++) {
        scanf("%d",&q.data[q.tail]);
        q.tail++; //自增在后面,表示队尾指在最后一个数的后一位
    }
    
    while (q.head < q.tail) {
        //首先队首打印,即删除的数字
        printf("%d ",q.data[q.head]);
        q.head++;
    
        //将新队首的数添加到队尾
        q.data[q.tail] = q.data[q.head];
        q.tail++;
        //再将队首出队
        q.head++;
    }
    
    
    return 0;
}

2.链表

假设目前我们已经排序好了一串数字,但中途要插入一个数字,这样的话,大于这个数字的数都要往后移一位了。

int main(int argc, const char * argv[]) {

    /*
     假设2个数组,1个为数字的列表,另外一个为每一个数字的右边的数字的排序
     
     data    2 3 5 8 9 10 18 26 32
     right   2 3 4 5 6  7  8  9  0
     
 =>  data    2 3 5 8 9 10 18 26 32 6
     right   2 3 4 5 6  7  8  9  0 10
     
 =>  data    2 3 5  8 9 10 18 26 32 6
     right   2 3 10 5 6  7  8  9  0 4
     */
    
    
    
    int data[101],right[101];
    int i,n,t,len;
   
    printf("需要读入多少个数字");
    scanf("%d",&n);
    for (i = 1; i <= n; i++) {
        scanf("%d",&data[i]);
    }
    len = n;
    
    //初始化数组right
    for (i = 1; i <=n; i++) {
        if (i!=n) {
            right[i] = i+1;
        }else{
            right[i] = 0;
        }
    }
    
    //直接再数组data的末位增加一个数
    printf("添加你需要插入的数字");
    len++;
    scanf("%d",&data[len]);
    
    //核心算法
    //从链表的头部开始遍历
    t =1;
    while (t != 0) {
        if (data[right[t]] > data[len]) {
            //right数组的位置调换
            right[len] = right[t];
            right[t] = len;
            break;
        }
        //因为位置调换了,原本的位置给放到len即最后处了
        t = right[t];
    }
    
    //输出链表(right数组)中所有的数
    t = 1;
    while (t != 0) {
        printf("%d",data[t]);
        t = right[t];
    }
    
}

 

© 著作权归作者所有

上一篇: RN问题集
下一篇: Swift 3.0学习总结
Ethan-GOGO
粉丝 13
博文 174
码字总数 82033
作品 0
广州
私信 提问
数据结构1 线性结构

数据结构是指数据元素的结合及元素间的相互关系和构造方法。元素之间的相互关系是数据的逻辑结构,元素关系的存储形式成为存储结构。数据结构按照逻辑关系的不同分为线性结构和非线性结构两大...

zhixin9001
2018/02/07
0
0
【数据结构与算法】-- 5. 如何实现一个队列(顺序队列和链式队列)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YYZZHC999/article/details/89644239 队列跟栈一样, 也是一种操作受限的线性表数据结构。 它具有先进先出的特...

杨晓慧_Hepburn
04/28
0
0
小蚂蚁学习数据结构(8)——线性结构——线性结构复习

线性结构即将告一段落,来个简单总结一下。 连续存储(数组) //定义一个数组结构体struct Arr{ int * pBase; //保存数组的指针 int len; //保存数组的长度 int cnt; //数组元素的有效个数}...

嗜学如命的小蚂蚁
2016/01/05
43
0
LinkedList双向链表解析

Queue是队列 add 增加一个元素 offer 添加一个元素并返回true 如果队列已满,则返回false remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 poll 移除并...

icecrea
2017/11/27
0
0
数据结构-栈&队列&Deque实现比较

栈 栈: 限定仅在表尾进行插入和删除操作的线性表; 后进先出(LIFO)。 在表尾进行操作,表尾是栈顶;最新进栈的元素在栈底。 栈的ADT Stack_ADT 进栈&出栈 栈 栈的存储结构实现 顺序栈 栈也...

IAM四十二
2017/10/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二、Docker

1、Docker - The TLDR(Too Long,Don't Read,Linxu 终端工具 ) Docker是在Linux和Windows上运行的软件。它创建、管理和编排容器。该软件以开源方式开发,在Github上作为Moby开源项目的一部分。...

倪伟伟
35分钟前
2
0
Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
今天
5
0
Guava RateLimiter限流源码解析和实例应用

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高...

算法之名
今天
13
0
国产达梦数据库与MySQL的区别

背景 由于项目上的需要,把项目实现国产化,把底层的MySQL数据库替换为国产的达梦数据库,花了一周的时间研究了国产的数据库-达梦数据库,它和MySQL有一定的区别,SQL的写法也有一些区别。 ...

TSMYK
今天
2
0
老也有错?35岁程序员是一道坎,横亘在每个技术职场人的心中

随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论。很多程序员在工作5-10年以后,都会开始思考5年、10年甚至更久以后的自己,会是怎样一种生活工作状态,以及是否会被时代抛...

我最喜欢三大框架
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部