首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据结构——队列(C语言版

准备工作:本人习惯将文件放在test.c、SeqList.c、SeqList.h三个文件中来实现,其中test.c用来放主函数,SeqList.c用来放调用的函数,SeqList.h用来放头文件和函数声明...,头部出数据,所以我们要定义一个头指针和一个尾指针指向头尾两个数据,这样有利于我们后面增加或者删除数据,我们可以再定义一个结构体来存放这两个指针 typedef struct Queue { QNode...4、删除 栈和队列都有一个特点就是,数据只会输出一遍,也就是数据一经输出就会销毁删除 如下: 1在输出之后就会被删除,删除的代码如下: //删除 void QueuePop(Queue* pq) {...QueueBack(Queue* pq); //取长度 QDataType QueueSize(Queue* pq); //判断是否为空 bool QueueEmpty(Queue* pq); SeqList.c...pq); return pq->size; } bool QueueEmpty(Queue* pq) { assert(pq); return pq->phead == NULL; } 运行后结果

6410

数据结构——栈(C语言版)

前言: 在学习完数据结构顺序表和链表之后,其实我们就可以做很多事情了,后面的栈和队列,其实就是对前面的顺序表和链表的灵活运用,今天我们就来学习一下栈的原理和应用。...准备工作:本人习惯将文件放在test.c、SeqList.c、SeqList.h三个文件中来实现,其中test.c用来放主函数,SeqList.c用来放调用的函数,SeqList.h用来放头文件和函数声明...队列中的数据是按照先进后出的顺序的,也就是说先进去的数字后出来 因为栈的这种性质,所以栈我们用顺序表来实现比链表方便很多,顺序表就可以实现尾插尾出,所以我们一般就采用顺序表来实现 栈的节点结构 队列采用的顺序表的结构...bool STEmpty(ST* pst); //找栈顶元素 STDataType STTop(ST* pst); //栈中元素个数 STDataType STSize(ST* pst); test.c...return pst->capacity; } 总结 总之,其实栈就是对顺序表的应用,熟练栈和队列,对我们巩固顺序表和链表帮助很大,当然,栈在一些场景下很实用,后面我会出一个专门的习题讲解篇章,讲数据结构的一些经典题型

7010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数据结构——单向链表(C语言版

    数据结构和算法中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在C语言中,我们可以使用指针来实现单向链表。下面将详细介绍如何用C语言实现单向链表。...每个节点包含一个数据域和一个指向下一个节点的指针域。 typedef struct Node { int data; struct Node* next; } Node; 2....遍历链表 实现遍历链表并打印节点数据的函数: void printList(Node* head) { Node* current = head; while (current !...head, 2); printf("List after deleting 2: "); printList(head); return 0; } 通过以上步骤,我们实现了用C语言创建...链表是一种重要的数据结构,掌握链表的实现原理对于理解其他数据结构和算法也非常有帮助。

    8910

    数据结构——顺序表(C语言版

    顺序表是数据结构中最基本的一种线性表,它以一段连续的存储空间来存储数据元素,元素之间的顺序由它们在内存中的位置来决定。在C语言中,我们通常使用数组来实现顺序表。...顺序表的结构定义 首先,我们需要定义一个结构体来表示顺序表,包括数据元素数组和当前元素个数等信息: #define MAX_SIZE 100 // 定义顺序表的最大容量 typedef struct...的位置为: %d\\n", index); } else { printf("元素30不存在\\n"); } return 0; } 通过以上实现,我们可以在C语言中创建...顺序表的简单实现不仅有助于理解数据结构的基本概念,还可以为解决实际问题提供基础。...顺序表作为线性表的开头部分,对于我们后续学习数据结构中还是很重要的,需要我们把它学好,本篇文章也只是点了一下知识点并给出少许例子,更多的知识还需要我们自己去探索学习!

    8110

    位运算--C语言版

    我们知道0 & (0/1)结果都是0,只有当1&1时结果才为1,而二进制中无非就是0和1 ,所以一个数的二进制的最后一位就可以通过&1得出来 图解 知道了一个数二进制的最后一位之后,只每次需要将这个数进行右移...1位,一共右移32次,每次&1的结果为1,计数器就+1,即可统计出这个数字一共有多少个数字1 代码如下: public static int Findnum(int n) { int...假设输入一个-1,每右移一位数字,在二进制的左端还是会补一个符号位1,所以代码就会死循环 其实只要改成无符号右移,就会在二进制的左端补0,这样就可以解决负数的问题 public static int Findnum...上面的代码还是在一位一位按顺序进行移位,有没有更好的方法可以将1的个数全部快速的求出来?

    68710

    数据结构(C语言版)系列二】 栈

    数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构。但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型。...顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈订的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。...通常的习惯做法是以top=0表示空栈,但与C语言中数组的下标从0开始冲突。...附几个栈的应用举例: 3-2-进制转换-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版 3-3-行编辑程序-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版 3-4-迷宫寻路-栈和队列-第...3章-《数据结构》课本源码-严蔚敏吴伟民版 3-5-表达式求值-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码

    1.3K20

    多线程编程C语言版

    printf("threadId=%lu\n",pthread_self()); pthread_join(thread_id,NULL); } 编译运行 $ gcc -o main main.c...既然是大部分数据那么就有属于线程的私有数据 TSD私有数据,同名但是不同内存地址的私有数据结构 创建私有数据 int pthread_key_create (pthread_key_t *__key,void...(pthread_key_t __key); - __key:pthread_key_t类型的变量 - __pointer:void*类型的值 Demo3:线程私有数据示例 //pthread_key_test.c...$ gcc -o main main.c -lpthread $ ....如果当前线程读数据 则允许其他线程进行读操作 但不允许写操作 如果当前线程写数据 则其他线程的读写都不允许操作 例如对数据数据的读写应用:为了满足当前能够允许多个读出,但只允许一个写入的需求,线程提供了读写锁来实现

    3.6K31

    数据结构之顺序表(C语言版

    顺序表是数据结构中最基本的一种线性表,它以一段连续的存储空间来存储数据元素,元素之间的顺序由它们在内存中的位置来决定。在C语言中,我们通常使用数组来实现顺序表。...顺序表的结构定义 首先,我们需要定义一个结构体来表示顺序表,包括数据元素数组和当前元素个数等信息: #define MAX_SIZE 100 // 定义顺序表的最大容量 typedef struct...的位置为: %d\\n", index); } else { printf("元素30不存在\\n"); } return 0; } 通过以上实现,我们可以在C语言中创建...顺序表的简单实现不仅有助于理解数据结构的基本概念,还可以为解决实际问题提供基础。...顺序表作为线性表的开头部分,对于我们后续学习数据结构中还是很重要的,需要我们把它学好,本篇文章也只是点了一下知识点并给出少许例子,更多的知识还需要我们自己去探索学习!

    7710

    数据在内存中的存储方式--C语言版

    1.数据类型的介绍 在C语言中有很多的内置类型,如 char //字符数据类型 short //短整型...//单精度浮点数 double //双精度浮点数 使用这些内置类型就意味着开辟内存的大小和看待内存空间的视角,是C语言中必不可少的...--a的原码 //10000000000000000000000000000001 --b的原码 //10000000000000000000000000000010 相加后的结果...--b的补码 //00000000000000000000000000000001 --a的原码 //00000000000000000000000000000000 --相加后的结果为...大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地 址中; 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。

    55830

    判断大小端--C语言版

    大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中; 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。...printf("小端\n"); } else { printf("大端\n"); } return 0; } 方法二:利用联合体数据存储的特点...联合体里面的数据会共用同一块内存,改变其中一个数据的值,其他数据的值可能也会随之变化 int is_byteorder(int* p) { union un { //定义一个联合体类型...int i; char c; }u; u.i = 1;//修改i的值,c的值也会随之发生变化 return u.c; } int main() { int...\n"); } else { printf("大端\n"); } return 0; } 如果将 i 改为1,如果是小端存储,就会将01存储到 c

    2K20
    领券