avatar
文章
101
标签
24
分类
11

主页
目录
  • 归档
  • 标签
  • 类别
友链
关于我
...
主页
目录
  • 归档
  • 标签
  • 类别
友链
关于我

...

数据结构笔记:串
发表于2021-07-28|数据结构/算法
串的抽象数据类型 1234567891011121314151617181920212223ADT 串(string)DataOperation StrAssign(T, *chars): 生成一个其值等于字符串常量chars的串T StrCopy(T, S): 串S存在,由串S复制得串T ClearString(S): 串S存在,将串清空 StringEmpty(S): 若串S为空,返回true,否则返回false StrLength(S): 返回串S的元素个数,即串的长度 StrCompare(S, T): 若S>T,返回值>0,若S=T,返回0,若S<T,返回值<0 Concat(T, S1, S2): 用T返回由S1和S2联接而成的新串 SubString(Sub, S, pos, len): 串S存在,1≤pos≤StrLength(S), 且0≤len≤StrLength(S)-pos+1,用sub ...
数据结构笔记:队列
发表于2021-07-28|数据结构/算法
队列的抽象数据类型 123456789101112ADT 队列(queue)DataOperation InitQueue(*Q): 初始化操作,建立一个空队列Q DestroyQueue(*Q): 若队列Q存在,则销毁它 ClearQueue(*Q): 将队列Q清空 QueueEmpty(Q): 若队列Q为空,返回true,否则返回false GetHead(Q, *e): 若队列Q存在且非空,用e返回队列Q的队头元素 EnQueue(*Q, e): 若队列Q存在,插入新元素e到队列Q中并成为队尾元素 DeQueue(*Q, *e): 删除队列Q中队头元素,并用e返回其值 QueueLength(Q): 返回队列Q的元素个数endADT 循环队列 循环队列的结构 1234561 typedef int QElemType; // QElemType类型根据实际情况而定,这里假设为int2 typedef struct {3 QElemType data[MAXSIZE];4 int front; // ...
数据结构笔记:栈
发表于2021-07-27|数据结构/算法
栈的抽象数据类型 123456789101112ADT 栈(stack)Dataoperation InitStack(*S): 初始化操作,建立一个空栈S DestroyStack(*S): 若栈存在,则销毁它 ClearStack(*S): 将栈清空 StackEmpty(S): 若栈为空,返回true,否则返回false GetTop(S, *e): 若栈存在且非空,用e返回S的栈顶元素 Push(*S, e): 若栈S存在,插入新元素e到栈S中并成为栈顶元素 Pop(*S, e): 删除栈S中栈顶元素,并用e返回其值 StackLength(S): 返回栈S的元素个数endADT 栈的顺序存储结构 栈的结构 123451 typedef int SElemType; // SElemType类型根据实际情况而定,这里假设为int2 typedef struct {3 SElemType data[MAXSIZE];4 int top; // 用于栈顶指针5 } SqStack; 进栈 ...
数据结构笔记:线性表(顺序存储结构&链式存储结构)(待填坑
发表于2021-07-21|数据结构/算法
线性表的抽象数据类型 123456789101112ADT 线性表(List)DataOperation InitList(*L); 初始化操作,建立一个空的线性表L ListEmpty(L); 若线性表为空,返回true,否则返回false ClearList(*L); 将线性表清空 GetElem(L, i, *e) 将线性表L中的第i个位置元素值返回给e LocateElem(L, e); 在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败 ListInsert(*L, i, e); 在线性表L中的第i个位置插入新元素e ListDelete(*L, i, *e); 删除线性表L中第i个位置元素,并用e返回其值 ListLength(L); 返回线性表L的元素个数endADT 线性表的顺序存储结构 将所有的在线性表Lb中但不在La中的数据元素插入到La中 1234567891011 1 void unionL(SqList *La, SqList Lb) { 2 ...
贪心算法例题
发表于2021-07-16|数据结构/算法
硬币问题 1234567891011121314151617 1 // 硬币的面值 2 const int V[6] = {1, 5, 10, 50, 100, 500}; 3 4 // 输入 5 int C[6]; // C[0] = C_1, C[1] = C_5, ... 6 int A; 7 8 void solve() { 9 int ans = 0;10 for (int i = 5; i >= 0; i--) {11 int t = min(A / V[i], C[i]); //使用硬币i的枚数12 A -= t * V[i];13 ans += t;14 }15 16 printf("%d\n", ans);17 } 区间问题 12345678910111213141516171819202122232425262728 1 const int MAX_N = 100000; 2 3 // 输 ...
DFS和BFS的实例
发表于2021-07-15|数据结构/算法
深度优先搜索的两个实例: 部分和问题 1234567891011121314151617181920212223 1 // 输入 2 int a[MAX_N]; 3 int n, k; 4 5 // 已经从前i项得到了和sum,然后对于i项之后的进行分支 6 bool dfs(int i, int sum) { 7 // 如果前n项都计算过了,则返回sum是否与k相等 8 if (i == n) return sum == k; 9 10 // 不加上a[i]的情况11 if (dfs(i + 1, sum)) return true;12 13 // 加上a[i]的情况14 if (dfs(i + 1, sum + a[i])) return true;15 16 // 无论是否加上a[i]都不能凑成k就返回false17 return false;18 }19 20 void solve() {21 if (dfs(0, 0)) printf("Yes\n" ...
完全二叉树之堆
发表于2021-07-13|数据结构/算法
堆排序和快速排序一样,时间复杂度为Ο(N㏒N)。以升序排序为例,可以先建立最小堆,然后每次删除顶部元素并将顶部元素输出或者放入一个新的数组中,直到堆空为止。最终输出的或者存放在新数组中的数就已经是排序好的了。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 1 //第一种方法 2 #include <stdio.h> 3 4 int h[101]; //用来存放堆的数组 5 int n; //用来存储堆中元素的个数,也就是堆的大小 6 7 //交换函数,用来交换堆中的两个元素的值 8 void swap(int x, int y) { 9 int t;10 t = h[x];11 h[x] = h[y];12 h[y] = t;13 }14 15 //向下调整16 void sif ...
分别用DFS和BFS实现图的遍历
发表于2021-07-12|数据结构/算法
DFS模板: 1234567891011 1 void dfs(int step) { 2 if (...) //判断边界,到达边界则返回 3 return; 4 for (循环所有方向) { 5 if (...) { //可能需要判断条件 6 book[...] = 1; //标记 7 dfs(step+1); 8 book[...] = 0; //取消标记 9 }10 }11 } 用DPS遍历图。我们用一个二维数组e来储存图。 我们用上面二维数组中的(i, j)储存的数字来表示顶点i到顶点j是否有边——1表示有边,∞表示没有边,0表示自己到自己(即i等于j)。 12345678910111213141516171819202122232425262728293031323334353637383940414243 1 //图的遍历 - 深度优先 2 #include <s ...
栈
发表于2021-07-10|数据结构/算法
直接看实例吧,用栈判断回文 1234567891011121314151617181920212223242526272829303132333435363738 1 #include <stdio.h> 2 #include <string.h> 3 int main() { 4 char a[101], s[101]; 5 int i, len, mid, next, top; 6 7 gets(a); //读入一行字符串 8 len = strlen(a); //求字符串的长度 9 printf("%d\n", len);10 mid = len/2-1; //求字符串的中点11 printf("%d\n", mid);12 13 top = 0; //栈的初始化14 //将mid前的字符依次入栈15 for (i = 0; i <= mid; i++)16 s[++top] = a[i];17 18 ...
链表
发表于2021-07-09|数据结构/算法
2021-07-14 09:54:08 来填坑了。 链表是如何实现的呢?如下。 12345678910111213141516171819202122232425262728293031323334353637 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 //创建一个结构体用来表示链表的结点类型 5 struct node { 6 int data; 7 struct node *next; 8 }; 9 10 int main() {11 struct node *head, *p, *q, *t;12 int n, a;13 scanf("%d", &n);14 head = NULL; //头指针初始为空15 for (int i = 1; i <= n; i++) { //循环读入n个数16 scanf("%d", &a);17 ...
1…91011
avatar
iterfun
大三就读
文章
101
标签
24
分类
11
Follow Me
最新文章
Redis 笔记(五):分布式缓存-分片集群2025-06-04
Redis 笔记(四):分布式缓存-哨兵机制2025-06-04
JVM 笔记(一):JVM 简介 & 运行时数据区2025-06-02
Redis 笔记(三):分布式缓存-主从集群2025-06-01
Redis 笔记(二):分布式缓存-主从集群2025-05-31
分类
  • Java4
    • JVM1
    • Java SE3
  • 其他3
  • 操作系统1
    • Unix/Linux1
  • 数据结构/算法82
  • 消息队列2
标签
搜索 基础算法 枚举 递推 动态规划 递归与递推 优先队列 数论 队列 链表 滑动窗口 二分 树 字符串 模拟 数据结构 二叉树 哈希表 排序 贪心 图论 剑指Offer 栈 前缀和
归档
  • 六月 20254
  • 五月 20254
  • 十月 20241
  • 六月 202435
  • 九月 20233
  • 五月 20231
  • 四月 20232
  • 三月 202314
©2020 - 2025 By iterfun
粤ICP备2022058194号