精华内容
下载资源
问答
  • 字符是组成语言的最基本元素。 在C语言中使用字符分为标识符、关键字、运算符、分隔符、常量和注释符6类。 C语言中使用常量可分为数字常量、字符串常量、符号常量及转义字符多种。 1.标识符 c语言中常量、变量、...

    C语言的基本构成元素——字符集、标识符和关键字
    字符是组成语言的最基本元素。
    在C语言中使用的字符分为标识符、关键字、运算符、分隔符、常量和注释符6类。
    C语言中使用的常量可分为数字常量、字符串常量、符号常量及转义字符多种。
    1.标识符
    c语言中常量、变量、函数名称都是标识符,标识符的定义规则如下:
    1.标识符只能由字母、数字、下划线组成的字符串,且第一个字母必须是字母或下划线
    2.不能·使用C语言中保留的关键字(int if …)
    2.常量 :常量就是运行过程中不能改变的量
    常量分为静态常量和动态常量
    静态常量在程序编译时给值,且在整个程序编译周期内无法改变,无法做到用配置文件给值,较动态常量灵活性不足,但内存消耗非常低。
    动态常量在程序运行时给值,且在赋值之后的整个程序运行周期内无法改变,可以做到用配置文件给值,灵活性高,但要消耗一定内存。
    一般动态常量的运用比静态常量要多一些。
    注:对于静态常量和动态常量具体实现我会在以后再说,对这方面好奇的可以看一下这篇文章:
    https://blog.csdn.net/jhyBOSS/article/details/67640421?utm_source
    3.常量的类别
    ①数值常量 (整型常量、浮点型常量)
    ②c语言中字符常量就是单引号里的单个字符’a’ ‘A’
    特殊情况:\n,\a 这样的字符常量是转义字符,表示的不是后面的值,而是转义具体含义,c语言中常见的转义字符如下: 在这里插入图片描述
    3.字符串常量
    双引号表示: “ Hello ”
    ‘a’ 与 “a”区别
    (1)书写形式不同:字符串常量双引号,字符常量单引号
    (2)存储空间不同:在内存中,字符常量只占用一个存储空间,而字符串存储时必须占用一个存储空间来存储结束标志‘\o’,所以‘a’占用一个,而“a”占用两个
    (3)两者功能操作不同,字符常量可以进行加减运算,字符串常量不能。
    4.符号常量
    当某个常量引用复杂又经常被用到时,可以将该常量定义为符号常量,
    #define <符号常量名> <常量>
    其中<符号常量名>通常使用大写字母表示<常量>可以是数值常量也可以是字符常量
    一般情况下,符号常量定义命令要放在主函数main()之前

    展开全文
  • 1. 程序注释有什么用?...主函数是一个程序的最主要部分,程序是以函数形式运行,有了主函数,程序才得以顺利运行,主函数就好像是人与计算机之间交流工具~ 3. int 是个什么鸟? int是一个整数,用

    1. 程序注释有什么用?

    程序注释可以让繁琐的代码字符变得简明易懂,可以让计算机语言功底不扎实的菜鸟也可以一目了然的看明白代码的内涵,有主意菜鸟的学习,努力成为一只老鸟~

    2. 主函数是个什么东西?有什么用?

    主函数是一个程序的最主要的部分,程序是以函数形式运行的,有了主函数,程序才得以顺利的运行,主函数就好像是人与计算机之间交流的工具~
    3. int 是个什么鸟?

    int是一个整数,用来定义一些符号,代码,使一些原本毫无意义的字符被定义,从而可以在主函数中作为一个部分,使得函数的运行更加的清晰流畅~
    4. 循环,我喜欢,因为.........。

    循环是程序中常见的运行方式,有了循环,计算机工程师们可以省去好多的气力,去重复编写相同的代码,如购买油循环的话,工程师们会被活活的累死~

    展开全文
  • C语言是一种结构化编程语言结构化语言的基本元素是模块是程序一部分每一个模块中都只有一个出口和一个入口 结构化程序由若干模块组成每个模块中包含若干个基本结构而每个基本结构中可以有若干条语句C语言有三种...
  • 1.程序注释可以自己和别人方便阅读,这一点需要成为编程良好习惯。以后自己开始从事编程序相关工作,会发现编程大多都是一时灵感,过后自己很容易看不懂。无论使用哪种软件编写,最好有注释。  2.主函数,...

      1.程序注释可以自己和别人方便阅读,这一点需要成为编程的良好习惯。以后自己开始从事编程序的相关工作,会发现编程大多都是一时的灵感,过后自己很容易看不懂。无论使用哪种软件编写,最好有注释。

      2.主函数,就是C\C++程序的入口函数。它是应用程序运行时首先执行的代码,所有的代码都要从进入主函数后才会执行。函数必须先声明才能用,调用函数必须在主函数之前先声明。   每个程序都必须有一个主函数。一般常用的是main()函数。

      3.int在C语言里,是integer的简写,就是整数的意思。

      4.循环,我喜欢,因为用最简单的方式表达,就是比较省事。有木有?偷笑

    展开全文
  • C语言实现栈构建、入栈、出栈、取栈顶元素基本操作 一 栈定义   在文章开头,小编强调一句:小编知道C++STL中有现成stack,可以直接拿来用,但是这里小编还是用C语言来实现stack的基本操作,请大家...

    C语言实现栈的构建、入栈、出栈、取栈顶元素等基本操作

    一 栈的定义

      在文章的开头,小编强调一句:小编知道C++的STL中有现成的stack,可以直接拿来用,但是这里小编还是用C语言来实现stack的基本操作,请大家不要喷小编,小编伤不起呀!!!
      栈最重要的性质是:后进先出。性质大家都知道,关键是如何运用栈后进先出的性质解决题目。
      好了,话不多说,咱们直接进入正题,其结构定义如下:

    typedef struct Stack {
        int *data;  //存储栈中元素
        int top, size;  //top: 栈顶元素下标, size: 栈的大小
    } Stack;
    

    二 向栈中插入元素

      向栈中插入元素很简单,只要将栈顶指针上移,同时将待插入的值,插入到栈顶,唯一需要注意的是,当栈满了之后,我们需要进行栈的扩容操作。
      元素入栈的示意图如下:
    入栈操作
    对应实现代码如下:

    bool expand(Stack *s) {  //栈 扩容
        if (!s) return false;
        int *tmp = NULL;
        int extra_size = s->size;
        //一般栈的扩容是扩大为原来大小的两倍
        //但是可能内存空间无法满足,此时申请的内存空间就要少一些了,这也是while循环的作用
        while (extra_size) {
            tmp = (int *)realloc(s->data, sizeof(int) * (s->size + extra_size));
            if (tmp) break;
            extra_size /= 2;
        }
        if (!tmp) return false;
        s->size += extra_size;
        s->data = tmp;
        return true;
    }
    
    bool push(Stack *s, int val) {  //入栈
        if (!s) return false;
        if (s->top == s->size - 1) {
            if (expand(s)) printf("expand success\n");
            else {
                printf("expand failed\n");
                return false;
            }
        }
        s->data[++s->top] = val;
        return true;
    }
    

    三 弹出栈顶元素

      注意弹出栈顶元素和取栈顶元素之间的区别,前者栈中不再存在,后者只是拿栈顶元素出来看看。
      弹栈示意图如下:
    弹栈操作
    实现代码如下:

    bool pop(Stack *s) {  //出栈
        if (!s || empty(s)) return false;  //栈空或者指针为空,返回false
        s->top--;
        return true;
    }
    

    四 取栈顶元素、判断栈空、删除栈、输出栈中元素 操作

    这四个操作的实现没有复杂的逻辑,所以此处直接展示代码

    bool empty(Stack *s) {  //判空
        return s->top == -1;
    }
    
    int top(Stack *s) {  //返回栈顶元素
        return s->data[s->top];
    }
    
    void output(Stack *s) {  //输出栈中元素
        if (!s) return ;
        printf("stack(%d) = [", s->top + 1);
        for (int i = 0; i <= s->top; i++) {
            if (i) printf(", ");
            printf("%d", s->data[i]);
        }
        printf("]\n");
    }
    
    void clear(Stack *s) {  //删除栈
        if (!s) return ;
        free(s->data);
        free(s);
    }
    

    五 总代码献上

    #include <iostream>
    using namespace std;
    
    typedef struct Stack {
        int *data;
        int top, size;
    } Stack;
    
    Stack *init(int size) {  //栈的初始化
        Stack *s = (Stack *)malloc(sizeof(Stack));
        s->data = (int *)malloc(sizeof(int) * size);
        s->size = size;
        s->top = -1;
        return s;
    }
    
    bool empty(Stack *s) {  //判空
        return s->top == -1;
    }
    int top(Stack *s) {  //返回栈顶元素
        return s->data[s->top];
    }
    
    bool expand(Stack *s) {  //栈 扩容
        if (!s) return false;
        int *tmp = NULL;
        int extra_size = s->size;
        while (extra_size) {
            tmp = (int *)realloc(s->data, sizeof(int) * (s->size + extra_size));
            if (tmp) break;
            extra_size /= 2;
        }
        if (!tmp) return false;
        s->size += extra_size;
        s->data = tmp;
        return true;
    }
    bool push(Stack *s, int val) {  //入栈
        if (!s) return false;
        if (s->top == s->size - 1) {
            if (expand(s)) printf("expand success\n");
            else {
                printf("expand failed\n");
                return false;
            }
        }
        s->data[++s->top] = val;
        return true;
    }
    
    bool pop(Stack *s) {  //出栈
        if (!s || empty(s)) return false;
        s->top--;
        return true;
    }
    
    void output(Stack *s) {  //输出栈中元素
        if (!s) return ;
        printf("stack(%d) = [", s->top + 1);
        for (int i = 0; i <= s->top; i++) {
            if (i) printf(", ");
            printf("%d", s->data[i]);
        }
        printf("]\n");
    }
    
    void clear(Stack *s) {  //删除栈
        if (!s) return ;
        free(s->data);
        free(s);
    }
    
    int main() {
        srand(time(0));
        #define MAX_OP 20
        int op, val;
        Stack *s = init(1);
        for (int i = 0; i < MAX_OP; i++) {
            val = rand() % 100;
            op = rand() % 4;
            switch (op) {  //之所以这样,插入元素的频率比删除多,代码演示效果才好
                case 0:
                case 1:
                case 2: {
                    printf("insert %d into stack = %d\n", val, push(s, val));
                    break;
                }
                case 3: {
                    printf("pop %d from stack = ", top(s));
                    printf("%d\n", pop(s));
                    break;
                }
                default: {
                    printf("it's impossible\n");
                }
            }
            output(s);
            printf("\n");
        }
        clear(s);
        return 0;
    }
    /*代码输出:
    insert 40 into stack = 1
    stack(1) = [40]
    
    expand success
    insert 79 into stack = 1
    stack(2) = [40, 79]
    
    pop 79 from stack = 1
    stack(1) = [40]
    
    insert 94 into stack = 1
    stack(2) = [40, 94]
    
    expand success
    insert 17 into stack = 1
    stack(3) = [40, 94, 17]
    
    pop 17 from stack = 1
    stack(2) = [40, 94]
    
    insert 68 into stack = 1
    stack(3) = [40, 94, 68]
    
    insert 69 into stack = 1
    stack(4) = [40, 94, 68, 69]
    
    expand success
    insert 23 into stack = 1
    stack(5) = [40, 94, 68, 69, 23]
    
    insert 7 into stack = 1
    stack(6) = [40, 94, 68, 69, 23, 7]
    
    insert 91 into stack = 1
    stack(7) = [40, 94, 68, 69, 23, 7, 91]
    
    insert 27 into stack = 1
    stack(8) = [40, 94, 68, 69, 23, 7, 91, 27]
    
    pop 27 from stack = 1
    stack(7) = [40, 94, 68, 69, 23, 7, 91]
    
    insert 34 into stack = 1
    stack(8) = [40, 94, 68, 69, 23, 7, 91, 34]
    
    pop 34 from stack = 1
    stack(7) = [40, 94, 68, 69, 23, 7, 91]
    
    insert 46 into stack = 1
    stack(8) = [40, 94, 68, 69, 23, 7, 91, 46]
    
    expand success
    insert 4 into stack = 1
    stack(9) = [40, 94, 68, 69, 23, 7, 91, 46, 4]
    
    pop 4 from stack = 1
    stack(8) = [40, 94, 68, 69, 23, 7, 91, 46]
    
    insert 21 into stack = 1
    stack(9) = [40, 94, 68, 69, 23, 7, 91, 46, 21]
    
    insert 75 into stack = 1
    stack(10) = [40, 94, 68, 69, 23, 7, 91, 46, 21, 75]
    */
    

    六 关于栈的思考

      栈先入后出的性质深入人心,我们在用栈时,绝大部分都是使用栈的这个性质,甚至我们熟悉的递归函数也是通过系统栈实现的 (系统栈的大小为 8MB,所以递归层数过深才会出现爆栈这样的情况), 但是栈是否还有别的特殊的性质呢?
      大家都知道关于栈的一个典型题目就是括号匹配问题,详情点击我,我们用到的就是栈,关于具体的实现代码,小编这里不想赘述,只是想说一说括号匹配这道题该自己带来的思考。
    栈 括号匹配
      我们把括号的(看成事件的开始,把)看成事件的结束,那么一个完整的括号()就表示一个完整的事件,而括号之外又有括号,这就是事件之间的完全包含关系,由此我们知道栈可以用来解决完全包含关系的问题 (重要)!!!!!!!
      最后小编在抛出最后一个疑问:树和完全包含关系之间有什么关系?这和栈又有什么关系???

      这一点,小编在二叉树部分进行了阐述,此处不再赘述, 详情请点击我进行跳转

      加油,穷且益坚,不坠青云之志!吾将天天敲代码!

    展开全文
  • C语言数组基本知识

    2021-05-29 21:55:31
    为了声明数组,需要指明数组元素得类型和数量(数组的元素可以是任何类型,数组的长度可以是任何常量表达式) 因为程序以后改变时可能需要调整数组的长度,所以比较好的方法是用宏来定义数组长度: #define N 10 ...
  • 线性表的定义:线性表是最基本、最简单、也是最常用的一种数据结构。表头具有唯一一个后继,表尾有唯一一个前驱,表中的元素存在唯一的前驱和后继。是一对一的关系 从数学角度来讲,树结构和散结构都是图的特例,表...
  • C语言过程中枯燥部分,分几次讲解,我会尽量用轻松方式讲解 过了这部分,后面学习就会变得有意思一些了 C语言的基本字符集 1. 标识符命名规则 1. 1 什么是标识符? 在C语言中,符号常量,变量,数组...
  • 链栈实现与基本操作(C语言)链栈基本操作定义入栈出栈得到栈顶元素主函数 今天是顺序栈升级,用链式存储结构来实现栈,新手上路,多多关照 链栈 链栈存储结构与单链表存储结构相同。由于栈是在栈顶进行删除...
  • 栈一共有两种储存结构 1.顺序栈 2.链栈 ...还可设置一个变量len,用来储存栈内元素的个数,当然不设置也可以,写一个GetLength()也可。 定义一个结点 typedef struct SNode { ElemType value; struc
  • 3枚举类型是一种基本的数据类型,数据类型中的元素是系统认定的,和整型,字符型浮点型数据类型同级别。不存在全局,局部之说。而用枚举类型声明定义的变量是有局部和全局说法的 以每周七天为例,我们可以使用#...
  • 双端队列定义:可以在两端做插入和删除操作队列就叫做双端队列 一般来说,双端队列用循环数组来实现。...2.rear指向最后一个元素的下标下一个位置(初始化为0) 对于每一种操作: Push:先把front
  • 的基本操作: 1、堆在逻辑上为完全二叉树,物理上是顺序表结构 2、插入元素时需要向上调整堆,尾插,时间复杂度为O(logN) 3、删除元素时需要向下调整堆,尾删,时间复杂度为O(logN) 注意:先把堆顶元素和...
  • 单链表是一种基本的数据结构,有两部分组成:指针域和数据域,数据域用于存放数据,指针域用于指向下一个结点的位置。     为了操作方便,一般为单链表创建一个头结点,指向线性表的的首元素。...
  • 本文实例讲述了C语言基本排序算法之shell排序。分享给大家供大家参考,具体如下: shell排序是对直接插入方法改进方法. /*-----------------------------------------------------------------------------------...
  • 什么是队列 队列概念 对于队列,它也是一种受限制线性表。...假设队列是q=(a1,a2,…,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,列在最后。这也比较...
  • C语言实现顺序表初始化、增删查改基本功能引言定义原理实现过程及结果代码运行结果总结 引言 定义 顺序表是线性表顺序存储结构。形如A_1 、A_2…….A_n表,这个表大小为N;并且,我们称大小为0表为空表。 ...
  • 下面从最基本的定义讲起: 1、字符数组的定义与初始化//初始化一:字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char str[10]={ 'I',' ','a','m',' ',‘h','a','p','p','y'}; //即把10个
  • c语言是一种较为基础的语言,它概念少,词汇少,包含了基本的编程元素,可以说c语言是现在大多编程语言的鼻祖。 同时,C语言也是与内存密切相关的,它无时无刻都是在谈内存。从C语言到内存,从内存到进程和线程,...
  • 我们学习了顺序表及初始化过程,本节学习有关顺序表一些基本操作,以及如何使用 C 语言实现它们。 顺序表插入元素 向已有顺序表中插入数据元素,根据插入位置不同,可分为以下 3 种情况: 插入到顺序表...
  • 栈:一种特殊线性表,其只允许在固定一端进行插入和删除元素操作。进行数据插入和删除操作一端称为栈顶,另一端称为栈底。栈中数据元素遵守后进先出LIFO(Last In First Out)原则。 压栈:栈插入操作...
  • 顺序表插入元素 向已有顺序表中插入数据元素,根据...1.将要插入位置元素以及后续的元素整体向后移动一个位置; 2.将元素放到腾出来的位置上; 例如,在 {1,2,3,4,5} 的第 3 个位置上插入元素 6,实现过程如下: 遍历
  • 概念 撤回,即 Ctrl+Z,是我们常见的操作之一,大多数应用都会...栈中的元素采用 LIFO (Last In First Out),即后进先出。 下图的栈有 3 个元素,3 在上面,因此它会被第一个移除: 栈的基本操作 Push...
  • 我们学习了顺序表及初始化过程,本节学习有关顺序表一些基本操作,以及如何使用 C 语言实现它们。 顺序表插入元素 向已有顺序表中插入数据元素,根据插入位置不同,可分为以下 3 种情况: 插入到顺序表...
  • C语言的数据类型

    千次阅读 2014-01-25 22:43:57
    也就是说,基本数据类型是最基本的类型。 构造类型:构造类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本...
  • 八种基本的排序(1)——冒泡排序(C语言实现)

    万次阅读 多人点赞 2018-07-20 11:52:48
    冒泡排序 冒泡排序 原理 时间复杂度 算法稳定性 源代码 ...1.比较相邻的元素。...2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该...3.针对所有的元素重复以上的步骤,除了...
  • 栈?什么是栈? 栈的概念 栈是一种受约束的线性表,即...在图中,里面的元素是依次按a1,a2,·····an放入的,当出栈是an先出来,a1最后出来,达到了先入后出,先出后入的目的。 栈的基本操作 栈只能在一段(即栈...
  • 顺序表及其基本操作实现(C语言实现)

    千次阅读 多人点赞 2018-12-16 10:54:23
    顺序表是简单的数据结构之一,在计算机中顺序表一般以数组的形式保存,我们都知道数组是线性保存的,因此顺序表也是线性保存的,线性表的连续存储值得是在计算机中用一块连续的存储空间保存线性表的元素,所以...
  • front(队头指针)指向实际队列元素的第一个元素的前一个位置,rear(队尾指针)指向实际队列元素的最后一个元素位置。(可根据需要自定义) 2. 循环队列中满并非真正意义上满,即并不是所有位置上都存储有元素,...
  • 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 实际上我们简单的来理解栈的概念: 1.栈是一种存储结构。也就是说归根到底它是用来存储数据的,就像数组和链表。 2.栈...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 498
精华内容 199
关键字:

c语言最基本的元素是

c语言 订阅