又是debug的一天······无语

感想:别人的代码可不能信手拈来,使用的编译环境不一样会有大问题。以后一定要养成在c语言环境下初始化函数附带上返回值的好习惯,为啥我的init传的同样是指针,没有返回就不能初始化成功呢??~?~

再吐槽一点,即使是教材,同样会出错。网上的代码很多都是相互借鉴得来的。因此代码一定要自己写,自己debug出来的才会真正成为自己的东西。通过本例,我才了解到为何不使用指针也可以成为循环队列,就是因为front和rear这两个int类型的变量加1对数组长度取余的操作才因此实现。

附上代码

#include <stdio.h>
#include <stdlib.h>
#define size 100
typedef struct queue{
    int data[size];
    int front;
    int rear;
}queue;

//初始化 
queue *init(queue*q){
    q=(queue*)malloc(sizeof(queue));
    if(q==NULL)printf("内存分配失败");
    q->front=q->rear=0;
    return q;
}

//判断队列是否为空 
int is_empty(queue*q){
    return q->front==q->rear;
}

//入队列 
//rear,front无法初始化 
void enq(queue*q,int e){
    if((q->rear+1)%size==q->front){
        printf("队列已满");
    }
    else{
        q->data[q->rear]=e;
        q->rear=(q->rear+1)%size;//+1取余的操作就完成了队列的循环 
    }
}

//出队
int deq(queue*q){
    if(q->front==q->rear){
        printf("队列为空");
    }
    int e;
    e=q->data[q->front];
    q->front=(q->front+1)%size;
    return e;
}

//取头元素的操作
int gethead(queue*q){
    int e=0;
    e=q->data[q->front];
}

//杨辉三角的实现 
void ractangle(queue*q,int n){
    enq(q,1);
    int i,j,s,t=0;
    for(i=1;i<n+1;i++){//大循环,用以控制循环到杨辉三角第几层 
        enq(q,0);
        for(j=0;j<i;j++){//小循环,用以完成当前层杨辉三角元素的计算 
            t=deq(q);
            s=gethead(q);
            s+=t;
            enq(q,s);
        }
    }
}

//打印队列
void printl(queue*q){
    int e=0;
    while(!is_empty(q)){
        e=deq(q);
        if(e==0)continue;//去0操作 
        printf("%d ",e);
    }
}

void main(){
    int n=0;
    scanf("%d",&n);
    if(n>=size){
        printf("队列已满");
        return;
    }
    queue *q;
    q=init(q);
    //初始化的q传不进来?
    //init需要返回q?intresting 
    ractangle(q,n);
    printl(q);
    return;
}

数据结构——杨辉三角相关推荐

  1. 数据结构——c语言 递归输出杨辉三角

    戳这里还有其他数据结构的题目噢 数据结构--部分题目和代码实现目录_起当风萧的博客-CSDN博客 设计并验证输出杨辉三角的递归算法. (1)杨辉三角,又称贾宪三角形.帕斯卡三角形,是二项式系数在三角形 ...

  2. 数据结构--队列Queue--打印杨辉三角

    杨辉三角大家很熟悉,不做介绍了,第n行的首末两元素均为1,中间n-2个元素由n-1行相邻两元素相加得到. 将第1行数据入队(1) -------队列表示(队头,- 队尾)------- 第2行数据1入 ...

  3. java数据结构队列杨辉三角_数据结构之队列——输出杨辉三角形

    定义 队列是一种操作受限的线性表,只允许在一端进行插入,另一端进行删除.插入的一端称为队尾,删除的一端称为队头,由于这样的限制,所以队列具有先进先出的特性,因此队列也是一种先进先出的线性表. 顺序存储 ...

  4. 杨辉三角循环队列实现(数据结构c语言版)

    [问题描述]杨辉三角形是由[(a+b)]n二项式展开的各项系数形成的,当n=0,系数为1,生成第一行的元素:当a=1,a+b的各项系数组成第二行的元素:当n=2,a2+2ab+b^2的各项系数组成第三 ...

  5. 数据结构c语言程序杨辉三角,杨辉三角 --- C语言程序

    杨辉三角 ---  C语言程序 1.前言 最近在逛博客的时候发现一个特别有意思的三角形  然后便编写了下来.   它呢就是杨辉三角,也作为我的首篇博客吧 2.旅程开始 此处为网上所找到的公式以及各种概 ...

  6. 数据结构之杨辉三角实现

    (1)形如 1 1       1 1       2       1 1     3       3      1 1    4      6      4     1 称为杨辉三角 详细的概念参考 ...

  7. 数据结构之ArrayList实现杨辉三角

    代码主要思想 我们把杨辉三角看作一个直角三角形如图: 从右边的图我们看出来我们需要一个List<List>类型的对象,其中存储List>对象,达到效果,很容易看出来中间数字的求法,由 ...

  8. 【数据结构(C++)】用链队列计算杨辉三角

    目录 第一节 概述 第二节 开源代码 第一节 概述 杨辉三角是二项式系数在三角形中的一种几何排列,是中国古代数学的杰出研究成果之一.它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出 ...

  9. 【数据结构】ArrayList的具体使用(杨辉三角、扑克牌游戏)

    目录 1.了解集合的框架 2.了解ArrayList类 2.1.认识ArrayList类当中的属性 2.1.认识ArrayList类库当中的方法 2.1.1.了解构造方法 2.2.ArrayList类 ...

最新文章

  1. Java项目构建打包规范,jenkins2.121.1构建java项目环境,一键打包发布
  2. 计算机机房规范管理,计算机中心机房建设及管理规范.doc
  3. Python_基础_5
  4. 如何实现REST资源的输入验证
  5. htmlplay前端编辑器下载_2019年最好用的代码编辑器推荐
  6. twisted系列教程十六–twisted守护进程
  7. 开发过程中任何一个时刻,只关注解决当前面临的问题。
  8. 这篇带你深入理解SpringBoot中的自动装配(好文精读)
  9. 32乘法运算_算术运算指令
  10. 材料的构成 —— 塑料
  11. 阿玛尼搜索引擎收录_被全网黑的阿玛尼权利,我一个大干皮咋用的挺好?
  12. 对灰色按钮克星的屏蔽
  13. 支付宝 java 签名_支付宝APP支付(Java后台生成签名具体步骤)
  14. 扫描件如何转换成pdf及word文档?
  15. 桌面虚拟化中VDI和IDV的五大区别
  16. 干货 | 节省55%测试时间,携程酒店比对平台介绍
  17. 30多种免费的高级WordPress主题,适用于令人惊叹的照片,教育和房地产网站
  18. 项管行知03--项目类型
  19. syskey (win7启动密码)加密和破解方法
  20. 如何将MAC的文件存储至NAS网络存储?

热门文章

  1. 计算机控制面板的知识,职称计算机WindowsXP知识点:控制面板
  2. ARM之汇编学习---如何编写ARM汇编程序
  3. 小米4什么时候发布?
  4. python 初始化数组_python3 数组(列表)初始化
  5. 来自工作表单元格的Excel按钮文本
  6. 中国10个“最”汉字的字
  7. 【饭谈】ChatGpt的崛起下,测试行业恐成最后赢家
  8. mysql executequery返回值_statement.executeQuery(sql)
  9. 魔兽世界怀旧服哪个服务器bl最多,魔兽世界怀旧服选择什么服务器最好 各服务器优缺点汇总...
  10. 程序员称子弹短信存在抄袭,罗永浩回复:感谢知乎蠢萌科学家们!