- 博客(7)
- 收藏
- 关注
原创 结构体对齐问题
如何计算结构体的大小 结构体变量的首地址,必须是结构体变量中"最大基本数据类型所占字节"的整数倍 结构体变量中的每个成员相对于结构体首地址的偏移量都是该成员基本数据类型所占字节的整数倍 结构体变量的总大小,为结构体变量中"最大基本类型数据成员所占字节数"的整数倍 对齐原因 平台原因(移植原因) 不是所有的硬件平台都能访问任意地址的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据的,否则抛出硬件异常。 性能原因 数据结构(尤其是栈),应该尽可能在自然..
2021-11-14 22:58:49
286
1
原创 两个队列实现一个栈
首先明白两个概念栈:先入后出队列:先入先出队1操作:入数据队2操作:若队列1 2都不为空从将队列1中除队尾元素全部移至队列2 队列1对头出 若队列2为空 将队列1中除队尾元素全部移至队列2 队列1对头出 若队列1为空 将队列2中除队尾元素全部移至队列1 队列2对头出总结可得:当队1 为空时 需要将队列2中除队尾元素全部移至队列1 队列2对头出队1不为空时,将队列1中除队尾元素...
2021-11-12 21:11:12
339
原创 两个栈实现一个队列C
首先明白两个概念栈:先入后出队列:先入先出我们规定入栈1,出栈2入:入栈1出:此时分为两种情况。若栈2为空,则将栈1所有元素移入栈2,从栈2栈顶出即可若栈2不为空,直接从栈2栈顶出即可以下为代码实现:初始化void my_Init_queue(PTSTqueue pq) { assert(pq != NULL); Init_Stack(&pq->s1); Init_Stack(&pq->s2);}由于是两个栈实现一
2021-11-09 23:26:59
782
原创 链式队列的实现
数据节点//有效数据节点结构体设计typedef struct Lqueue{ ELEM_TYPE data;//数据域 Lqueue *next;//指针域}Lqueue, *PLqueue;头节点typedef struct Head{ Lqueue *front;//指针域 指向第一个有效数据节点 Lqueue *tail; //指针域 指向最后一个有效数据节点}Head, *PHead;初始化void Init_lqueue(PHead pq) { as
2021-11-09 23:12:05
260
原创 带头节点的单链表
单链表特点:逻辑上相邻,物理上不一定相邻头插o(1) 随机插入以及尾插 o(n)头删o(1) 按位置按值删除或尾删 o(n)查找 o(n)结构体设计:typedef struct Node { int data; Node* next;}Node,*PNode;初始化函数:void Init_list(PNode plist) { assert(plist != NULL); //plist->data 头节点数据域不使用 plist->next
2021-10-29 22:57:18
175
原创 线性表的顺序表示和实现
线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。数据元素是一个抽象的符号,其具体含义在不同的情况下一般不同。线性表具有以下特点:1.简单 好实现2.逻辑上相邻,物理上也相邻3.插入的时间复杂度为o(n) 尾插的时候时间复杂度为o(1)4.删除时间复杂度o(n) 尾删除的时间复杂度为o(1)5.随机访问时间复杂度为o(1) 有数组下标帮忙线性表结构体设计:typedef int ELEM_TYPE;#define I
2021-10-10 22:27:27
60
原创 c语言单链表的逆置
单链表的逆置方法一:头插void Reverse(Node* plist) { assert(plist != NULL&&plist->next!=NULL); Node* p = plist->next; Node* q; plist->next = NULL; while (p != NULL) { q = p->next; p->next = plist->next; plist->next = p; p
2021-10-08 13:38:26
2583
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人