- 博客(41)
- 收藏
- 关注
原创 C语言杨辉三角
#include<stdio.h>#define N 10int main(){ static int A[N][N];//定义二维数组 for (int i = 0; i < N; i++)//第一列与对角线赋值为全1 { A[i][0] = 1; A[i][i] = 1; } for (int i = 2; i < N; i++)//赋值其他元素的值 { for (int j = 1; j < i; j++) { A[i][j] .
2021-09-24 20:12:38
202
原创 二叉树权值的计算
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define ElemType inttypedef struct BitNode{ ElemType weight; struct BitNode* lchild, * rchild;}BitNode, * BiTree;ElemType GreatTree(BiTree& T){ ElemType data; scanf_.
2021-07-23 18:54:07
4645
原创 二叉树求叶子节点
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define ElemType inttypedef struct BitNode{ ElemType weight; struct BitNode* lchild, * rchild;}BitNode, * BiTree;ElemType GreatTree(BiTree& T){ ElemType data; sca.
2021-07-23 18:27:22
954
原创 选择排序:简单选择排序与堆排序
#include<stdio.h>#include<stdbool.h>#define ElemType int#define MaxSize 50void Swap(ElemType& a, ElemType& b)//交换a,b两元素的值{ ElemType temp = a; a = b; b = temp;}void SelectSort(ElemType A[], int n)//简单选择排序{ int i = 0, mi.
2021-07-20 21:56:13
109
原创 插入排序:直接插入排序,折半插入排序,希尔排序;交换排序:冒泡排序,快速排序;
代码段:#include<stdio.h>#include<stdbool.h>#define ElemType int#define MaxSize 50ElemType A[MaxSize];void InsertSort1(ElemType A[], int n)//直接插入排序{ int j = 0, i = 0; for (i = 2; i <= n; i++)//依次将A[2]-A[n]插入前面已近排序的序列 { if (A[i] &l
2021-07-17 12:59:34
290
原创 二叉树层次遍历
代码段:nt LevelTree(BiTree T) //二叉树的层次遍历{ if (T == NULL)//树空返回0 return 0; else { BiTree Q[MaxSize];//定义一个足够储存树中所有元素的队列 int front = -1, rear = -1;//front为队头,rear为队尾 int last = 0, level = 0;//last指向当前层最右节点 rear++;//指针加一头节点入队 Q[rear] = T;//
2021-07-16 23:13:54
283
1
原创 二叉树先序建立,先序遍历,中序遍历,后序遍历,递归求二叉树深度,非递归求二叉树深度
代码如下:#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define MaxSize 50//定义MaxSize最大值为50typedef int ElemType; //数据类型//定义二叉树结构体typedef struct BiTNode { ElemType data; //数据域 struct BiTNode* lChild, * rChlid; //左右子树域}B
2021-07-11 21:35:48
651
2
原创 汉诺塔递归实现
#include<stdio.h>int count = 0;//记录移动次数void move(int n, char a, char b, char c){ if (n == 1) { printf(" 第%d个盘子: %c->%c\n", n, a, c); //当n只有1个的时候直接从a柱移动到c柱 count++;//次数加1 } else { move(n - 1, a, c,.
2021-06-18 11:11:19
100
原创 斐波那契数列的实现;递归;非递归;
代码段:#include<stdio.h>int Fib1(int n)//递归实现斐波那契数列{ if (n == 0) return 0; else if (n == 1) return 1; else return Fib1(n - 1) + Fib1(n - 2); }int Fib2(int n)//非递归实现{ int num1 = 0; int num2 = 1; int tem = 0; if (n == 0) {
2021-06-17 23:10:14
178
原创 数据结构循环队列的基本操作,初始化队,入队,出队,读取队头元素,判断队空;
入队:队尾指针加1取模,Q.rear=(Q.rear+1)%MaxSize;出队:队头指针加1取模,Q.front=(Q.front+1)%MaxSize;
2021-06-17 18:11:40
5718
3
原创 数据结构栈的操作,初始化栈,进栈,出栈,读取栈顶元素;
代码段:#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<string.h>#define MaxSize 50//定义栈最大长深度#define ElemType int//把int命名为ElemTypetypedef struct{ ElemType data[MaxSize];//存放栈元素 int top; //栈顶指针}SqSt
2021-06-17 16:33:15
1917
1
原创 数据结构中顺序表的建立,初始化,插入,按位置删除,按值删除,逆置;
#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<string.h>#define MaxSize 100//定义顺序表最大长度#define ElemType int//把int命名为ElemTypetypedef struct{ ElemType data[MaxSize];//顺序表元素 int length; //顺序表当前长度}Sq.
2021-06-17 00:41:17
528
原创 单链表保留第一次出现的节点,删除其余绝对值相等的节点
链表中|[data]|<=n例如:2,15,-15,2,3,6,3只保留:2,15,3,6;整体思想:设置
2021-06-09 09:40:26
902
原创 单链表查找倒数第k个元素
要求:只使用一次循环算法思路:使用两个指针p,q;把指针p,q,都指向第一个元素,p先开始向右运动k个位置后q再开始运动,当pyu
2021-06-08 23:47:11
3078
8
原创 11.设C= {a1, b1,a2, b2,a3,b3,}为线性表.
11.设C={a,b1,a2,b.",",b,}为线性表,采用带头结点的hc单链表存放,设计一个就地算法,将其拆分为两个线性表,使得A={a,a.",an},B={."b2,b1}.
2021-06-08 00:18:11
816
原创 第二种单链表逆置操作,原地逆置,空间复杂度为O(1)
逆置操作:LinkList Reverse_2(LinkList& L){ LNode* pre, * p = L->next, * r = p->next; p->next = NULL; //处理第一个元素 while (r != NULL) //r为空,则说明p为最后一个节点 { pre = p; p = r; r = r
2021-06-07 18:59:45
468
原创 单链表元素就地逆置
方法:把头节点摘下,从第一个结点开始,依次采用头插法的方法建立链表,直到最后一个节点为止;元素逆置部分代码;LinkList Reverse(LinkList& L) //L为带头结点的链表,现实现就地逆置{ LNode* p, * r; //p为工作指针,r记录p的后继,防断链 p = L->next; //从第一个节点开始 L->next = NUL
2021-06-07 18:27:54
972
原创 单链表中递归调用删除所有值为x的元素
删除部分代码void Del_x(LinkList& L, int x) //递归调用删除所有值为x的元素{ LNode* p; if (L == NULL) return; if (L->data == x) { p = L; L = L->next; free(p); Del_x(L, x); } else Del_x(L->next, x);}总体代码...
2021-06-07 12:04:26
1852
原创 线性表2020统考题
[2020统考真题]定义三元组(a,b,c)(a、b、c均为正数)的距离D=a一b|+|b-c|+|c-al。给定3个非空整数集合S、S2和Ss,按升序分别存储在3个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c)(a∈S1,b∈S,c∈S)中的最小距离。例如S,={-1,0,9},S2=({-25,-10,1011),S;={2,9,17,30,41},则最小距离为2,相应的三元组为(9,10,9)。...
2021-06-07 11:02:51
1008
原创 递增有序排列的线性表,最短时间查找元素x,若找到则将其与其后继元素交换位置;没有找到插入元素,使线性表依然呈升序排列
最短时间则采用折半查找#include <stdio.h>int n, A[]= { 1,2,3,4,5,16 };void Sei(int A[], int x) { int low = 0, high = n - 1, mid; //low和high分别指向线性表的上界和下界 while (low <= high) { mid = (low + high) / 2; //中间位置 i
2021-06-07 10:40:02
546
2
原创 C语言线性表元素循环向左移动p个位置;
思想:可视为将ab数组转化为ba数组,a代表前p个元素,b代表后p-1个元素,再分别把a,b逆置操作;例:n[]={1,2,3,4,5,6,7,8},先转化为n[]={8,7,6,5,4,3,2,1}
2021-06-07 09:29:47
401
原创 单链表的基本操作;头插法,尾插法建立链表,插入,删除,链表输出,求表长;这个更全,对特殊值处理更好;
#include<stdlib.h>#include<string.h>#include<stdio.h>typedef struct LNode{ int data; struct LNode* next;}LNode, * LinkList;LinkList List_H(LinkList& L) //头插法插入元素{ LNode* s; int x; L = (LinkList)malloc(size.
2021-06-07 00:19:20
263
原创 单链表元素的删除
先找到需要删除的元素,然后进行删除操作;找元素依然两种方法:按值查找和按位查找;这儿给出删除元素的代码;bool ListDelete(LNode* p) //删除元素{ if (p == NULL) return false; if (p->next == NULL) return false; LNode* q = p->next; p->next = q->next; free(q); return true;}...
2021-06-07 00:14:22
831
原创 单链表元素插入;
先贤先找到需要插入的位置,然后插入;找位置有两种方法:1.按位置查找;2.按值查找先给出插入的函数bool InsertNextNode(LNode* p, int e) //插入元素{ if (p == NULL) return false; LNode* s; s = (LNode*)malloc(sizeof(LNode)); if (s == NULL) return false; s->data = e; s->next = p->
2021-06-06 15:55:25
774
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人