c语言相关
风吹走了我脑壳后面的秀发
这个作者很懒,什么都没留下…
展开
-
最长公共子序列
最长公共子序列问题:给定两个序列.X= {x1,x2,…xm}和Y{y1,y2,…yn}.找出X和Y的最长公共子序列。子序列:一个给定序列的子序列是该序列中删除若干个元素后得到的序列eg.序列Z{B,C,D,B}是序列X{A,B,C,B,D,A,B} 的子序列,相应的递增下标序列为{2,3,5,7}解题步骤:具有最优子结构性质递归结构c[i][j]={0i,j=0c[i−1][j−1]+1i,j>0;xi=yjmax{c[i][j−1],c[i−1][j]}i,j>0;xi!原创 2022-01-14 08:24:35 · 173 阅读 · 0 评论 -
花呗计算
闲来无事,写一个花呗分期计算器,可以去我的资源里直接下载#include <stdio.h>int main(){ int stage; int end = 1; float money, gapAllP; float gapMP, GAPMPP; //分期还款每期应还本金= 可分期还款本金总额÷分期期数; //分期还款每期手续费 = 可分期还款本金总额×分期总费率÷分期期数; while (end) { p原创 2021-05-02 14:08:32 · 464 阅读 · 0 评论 -
括号匹配
#include <stdio.h>int Collocation(char a[]){ char tmp; char stack[8]; for (int i = 0, j = 0; i < 8; i++) { switch (a[i]) { case '[': stack[j++] = a[i]; break; case '{':原创 2021-03-16 19:19:30 · 65 阅读 · 0 评论 -
平衡二叉树,二叉排序树的优化
平衡二叉树的插入LL:节点A左孩子的左节点上插入节点。todo:右旋,A左孩子的右子树为A的左孩子RR:节点A右孩子的右节点上插入节点。todo:左旋,A右孩子的左孩子为A的右孩子LR:节点A左孩子的右孩子上插入节点。todo:先左旋转后右旋转,插入点为C,C的左孩子为B,右孩子为A。C的左孩子放到调整后节点的左边下,右孩子放到右边。RL:节点A右孩子的左孩子上插入节点。todo:先右旋后左旋,插入点为C,C的左孩子为A,右孩子为B。C的左孩子放到调整后节点的左边下,右孩子放到右边。..原创 2021-03-11 13:13:30 · 165 阅读 · 0 评论 -
图的存储结构(邻接矩阵,邻接表,广度优先,深度优先)
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>//邻接矩阵#define Max_Size 100typedef int VertexType;typedef int EdgeType;typdef struct{ VertexType vert[Max_Size]; EdgeType edge[Max_Size][Max_S原创 2021-03-08 12:14:33 · 258 阅读 · 0 评论 -
判断是否是最小堆
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int IsSmallHeap(int x[], int n){ int i, c1, c2; for (i = 0; i < n / 2; i++) { c1 = i * 2 + 1; c2 = 2 * i + 2; if (原创 2021-03-07 15:39:39 · 255 阅读 · 0 评论 -
归并排序
void MergeSort(int a[],int low,int high){ if(low<high){ int mid = (low + high)/2; MergeSort(a,low,mid); MergeSort(a,mid+1,high); Merge(a,low,mid,high); }}int *b = (int *)malloc(sizeof(int) * (n+1));void Merge(.原创 2021-03-07 11:51:46 · 70 阅读 · 0 评论 -
奇数在前,偶数在后,时间复杂度,空间复杂度最小
int method(int x[], int n){ int low = 0, high = n - 1; while (low < high) { while (x[high] % 2 != 0) high--; while (x[low] % 2 != 1) { low++; } if (low < high) {原创 2021-03-07 09:45:50 · 219 阅读 · 0 评论 -
双向冒泡排序
int double_bubble(int x[], int n){ int i, low = 0, high = n - 1; int flag = 1; while (low < high && flag) { for (i = low; i < high; i++) { if (x[i] > x[i + 1]) { swap原创 2021-03-07 09:36:25 · 68 阅读 · 0 评论 -
在数组中找出第K个最小值
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int K_Search(int x[], int n, int k){ int i, j, flag; for (i = 0; i < n - 1; i++) { flag = 0; for (j = n - 1; j >= i; j-原创 2021-03-07 09:04:46 · 156 阅读 · 0 评论 -
折半查找,递归非递归
int halfSearch(Seqlist list, int key){ int low = 0, mid, high = list.len - 1; while (low <= high) { mid = high / 2; if (list.elem[mid] == key) { return mid; } else if (key > list.elem[m原创 2021-03-04 10:00:31 · 88 阅读 · 1 评论 -
输出二叉树中大于x的所以值,由大到小
typedef struct node{ int data; struct node *lc, *rc;} LNode, *BiTree;LNode *p = NULL;void printValue(BiTree b, int x){ if (b == NULL) { return; } if (b->rc != NULL) { printValue(b->rc, x); } if原创 2021-03-03 11:04:29 · 1077 阅读 · 0 评论 -
查找二叉树中x的值在第几层,非递归
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>typedef struct node{ int data; struct node *lc, *rc;} LNode, *BiTree;int findLevel(BiTree b, int x){ int n = 0; if (b != NULL) {原创 2021-03-03 10:49:00 · 229 阅读 · 0 评论 -
判断二叉树是否为有序二叉树
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>typedef struct node{ int data; struct node *lc, *rc;} LNode, *BiTree;int preData = -9999;int isBst(BiTree b){ int b1, b2; if (b == NU原创 2021-03-03 10:39:47 · 1144 阅读 · 0 评论 -
二叉排序树的插入,创建
typedef struct node{ int data; struct node *lc, *rc;} LNode, *BiTree;int *InsertValue(BiTree b, int x){ if (b == NULL) { LNode *p = (LNode *)malloc(sizeof(LNode)); p->data = x; p->lc = p->rc = NULL;原创 2021-03-02 16:13:45 · 186 阅读 · 0 评论 -
二叉排序树的查找递归调用,非递归
typedef struct node{ int data; struct node *lc, *rc;} LNode, *BiTree;int findValue(BiTree b, int x){ LNode *p = b; if (p->data == x) { return 1; } else if (p->data > x) { return findValue(p->原创 2021-03-02 15:53:56 · 138 阅读 · 0 评论 -
中序线索二叉树的遍历
typedef struct node{ int data; struct node *lc, *rc; int lt, rt;} ThreadNode, *ThreadTree;ThreadNode *Nextnode(ThreadNode *p){ if (p->rc == 0) { return Firstnode(p->lc); //查到最左侧节点 } return p->rc; // 返回后继线索原创 2021-03-02 10:50:45 · 125 阅读 · 0 评论 -
树的层次遍历
typedef struct node{ int data; struct node *Lc, *Rc;} LNode, *BiTree;void LevelOrder(BiTree T){ initQueue(Q); BiTree B; enQueue(Q, T); while (!isEmpty(Q)) { deQueue(Q, B); visit(B); if (B->Lc !=原创 2021-03-02 09:08:37 · 98 阅读 · 0 评论 -
判断链表是否有环
typedef struct node{ int data; struct node *next;} LNode, *LinkList;LNode *FindLoopStart(LinkList head){ LNode *p1, *p2, *fast, *slow; p = fast = head, slow = head; while (slow != NULL && fast->next != NULL) { .原创 2021-03-01 09:02:35 · 85 阅读 · 0 评论 -
找到两个链表的相同节点
typedef struct node{ int data, freq; struct node *next, *front;} LNode, *LinkList;LNode *findaddr(LNode *str1, LNode *str2){ LNode *p = str1->next, *q = str2->next, *w = NULL; int i, strlen1, strlen2, n; strlen1 = count(str1原创 2021-02-28 21:59:49 · 412 阅读 · 0 评论 -
打印输出带头节点的单链表中倒数第K个位置的值
typedef struct node{ int data, freq; struct node *next, *front;} LNode, *LinkList;int Searchk(LinkList list, int k){ LNode *p = list->next; int n, cnt = count(list), i = 0; if (k > cnt) { return 0; } n =原创 2021-02-28 21:49:47 · 157 阅读 · 0 评论 -
双向不循环链表根据频度进行递减,频度越高越靠前
typedef struct node{ int data, freq; struct node *next, *front;} LNode, *LinkList;LNode *LocateX(LinkList L, int x){ LNode *w, *p; p = L->next; int flag = 0; while (p) { if (p->data == x) {原创 2021-02-28 21:33:02 · 154 阅读 · 0 评论 -
带头节点,输出循环单链表中的最小值并删除节点,直至空链表,删除队头
typedef struct node{ int data; struct node *next;} LNode, *LinkList;void DelAll(LinkList L){ LNode *p, *minp, *minPre, *pre; int min; while (L->next != L) { p = L->next; minPre = L; minp = p;原创 2021-02-28 21:11:30 · 295 阅读 · 0 评论 -
将两个循环链表连接并使得连接后依然是循环链表
typedef struct node{ int data; struct node *next;} LNode, *LinkList;LinkList Link(LinkList h1, LinkList h2){ LNode *p = h1->next, *q = h2->next; while (p->next != h1) { p = p->next; } while (q->next !原创 2021-02-28 20:47:58 · 222 阅读 · 0 评论 -
带头结点的循环上链表,判断是否对称
{ int data; struct node *next, *front;} LNode, *DlinkList;int Symmetry(DlinkList L){ LNode *p, *q; p = L->next; q = L->front; int flag = 1; while (p != q) { if (p->data == q->data) {原创 2021-02-28 20:39:31 · 198 阅读 · 0 评论 -
已知序列AB,判断B是否为A的子序列
int Pattern(LinkList A, LinkList B){ LinkList C = (LinkList)malloc(sizeof(LinkList)); LNode *p, *q, *w, *u; int flag; p = A->next; q = B->next; while (p) { flag = 1; u = p->next; w = q;原创 2021-02-28 20:24:54 · 686 阅读 · 0 评论 -
将两个链表的交集组合赋值给链表A
typedef struct node{ int data; struct node *next;} LNode, *LinkList;LinkList Unions(LinkList la, LinkList lb){ LNode *p, *q, *w, *u; p = la->next; q = lb->next; w = la; while (p && q) { if (p->d原创 2021-02-28 20:08:12 · 145 阅读 · 0 评论 -
将AB链表中的共同元素抽取出来,变成链表c
void GetCommon(LinkList A, LinkList B){ LinkList C = (LinkList)malloc(sizeof(LinkList)); C->next = NULL; LNode *p, *q, *w; p = A->next; q = B->next; while (p && q) { if (p->data < q->data)原创 2021-02-28 19:47:09 · 136 阅读 · 0 评论 -
将两个有序升序链表合并为新的有序链表并使链表单调递减(头插法)
void mergeList(LinkedList l1, LinkedList l2){ LNode *p1 = l1->next, *p2 = l2->next, *tmp; l1->next = NULL; while (p1 && p2) { if (p1->data <= p2->data) { tmp = p1; tmp->.原创 2021-02-28 19:30:44 · 152 阅读 · 0 评论 -
找出数组主元素,要求大于n/2
#include <stdio.h>#include <string.h>#include <stdlib.h>/** 利用一个和R数组相同的数组大小对数组中的元素就行统计,判断出统计数组中的大于n/2的元素*/void main(){ int R[] = {1, 2, 5, 4, 5, 5, 5, 4, 5, 5}, tmp[10] = {0}; for (int i = 0; i < 10; i++) {原创 2021-02-27 11:06:30 · 199 阅读 · 0 评论 -
移动数组升级版
#include <stdio.h>#include <string.h>#include <stdlib.h>void main(){ int R[5] = {1, 2, 3, 4, 5}, tmp[5]; int n = 15; for (int i = 0; i < n % 5; i++) { tmp[i] = R[i]; } for (int i = 0; i < 5 - n .原创 2021-02-27 10:40:45 · 105 阅读 · 0 评论 -
转置数组,求对角线和并返回
#include <string.h>#include <stdio.h>#define M 3#define N 3void show(int arr[M][N]){ int i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { printf("%4d", arr[i][j]); } p.原创 2020-12-17 13:06:37 · 142 阅读 · 1 评论 -
找出最大最小工资按员工号排序
#include <string.h>#include <stdio.h>#define N 3typedef struct{ int num; double m; char name[128], sexual, dep[128], call[128];} emp;void fun(emp arr[N]){ int i, j; emp tmp; for (i = 0; i < N - 1; i++) {.原创 2020-12-17 12:46:15 · 206 阅读 · 0 评论 -
两点时间差时分秒
#include <string.h>#include <stdio.h>#include <stdlib.h>typedef struct{ int h, m, s;} time;void fun(time mt[]){ time Tmp; Tmp = mt[0]; mt[0] = mt[1]; mt[1] = Tmp;}int main(){ time mt[2]; int i, m,原创 2020-12-15 13:22:29 · 177 阅读 · 0 评论 -
多个字符串比较大小
#include <string.h>#include <stdio.h>#include <stdlib.h>#define M 3#define N 2void fun(char *p[], int n, int way){ int i, j; char tmp[128]; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++)原创 2020-12-14 14:06:30 · 1317 阅读 · 1 评论 -
反序显示命令行参数的单词
#include <string.h>#include <stdio.h>#include <ctype.h>int main(){ char str[128], res[10][128]; int i, j = 0, k = 0; puts("please input a string"); gets(str); for (i = 0; str[i] != '\0'; i++) { if (st原创 2020-12-08 13:40:05 · 282 阅读 · 0 评论 -
养猪问题(有多少个猪圈)
#include <string.h>#include <stdio.h>typedef struct{ int num, last;} pig;int main(){ int i, cnt, j; int n; pig arr[10]; printf("for:"); scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d %原创 2020-11-30 13:10:20 · 398 阅读 · 0 评论 -
找出两个字符串最大相同字符个数
找出两个字符串最大相同字符个数#include <string.h>#include <stdio.h>int main(){ char str1[100], str2[100], tmp[100]; int flag, i, j = 0, max = 0, cnt = 0, tmpN; printf("first one:"); gets(str1); printf("second one:"); gets(str2);原创 2020-11-28 13:15:56 · 699 阅读 · 0 评论 -
二进制 计算
二进制补码00001010=0∗20+1∗21+0∗22+1∗23+0∗24...=1000001010=0*2^{0}+1*2^{1}+0*2^{2}+1*2^{3}+0*2^{4}... = 1000001010=0∗20+1∗21+0∗22+1∗23+0∗24...=10二进制加法00001010+00001100=0001011000001010 + 00001100 = 00...原创 2020-04-27 20:30:42 · 816 阅读 · 0 评论 -
C语言非常见关键字
auto:当前变量的作用域为当前函数或代码段的局部变量,意味着当前变量会在内存栈上进行分配const:关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变const int n=5; int const n=5;(相等)常量指针是指针指向的内容是常量,不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。int ...原创 2020-03-19 22:24:46 · 324 阅读 · 1 评论