随笔分类 - C数据结构
摘要:void cc(TNode *t,int &n){ //计算节点数量 if(t!=NULL){ n++; cc(t->lchild,n); cc(t->rchild,n); } } void leaf(TNode *t,int &n){ //叶子计算 if(t!=NULL){ if(t->lchil
阅读全文
摘要:void Copy(TNode *T,TNode *&NewT){ //参数旧树t,新书NewT if(T == NULL){ //旧树空直接空 NewT = NULL; return ; } NewT = (TNode*)malloc(sizeof(TNode)); //创建节点 NewT->da
阅读全文
摘要:思路:采用递归的方法。用两个值分别计算二叉树的左右子树的深度,左右子树中最深的的深度就是树的深度 int deep(TNode *t){ //参数:树t if(t == NULL) return 0; //若第一个节点就是空的,说明这是空树 int n = deep(t->lchild); //层层
阅读全文
摘要:1 //问题:若二叉树左孩子的值大于右孩子的值则交换左右孩子 2 //思路:可以用遍历的思想解决问题。采用后序遍历方法,目的是从下到上,从子到双亲进行交换 3 #include "stdio.h" 4 #include "stdlib.h" 5 typedef struct TNode{ //树节点
阅读全文
摘要:#include "stdio.h" #include "stdlib.h" typedef struct TNode{ //树节点 char data; TNode *lchild,*rchild; }TNode; typedef struct LNode{ //栈节点 char data; LN
阅读全文
摘要://问题:将非负十进制整数转换为二进制数 //思想:除二取余,逆序输出 //每次%2,所得值入栈,除二再取余。 //注:因为C int型没有小数。故得数会向下取整。如5/2=2,3/2=1 #include "stdio.h" #include "stdlib.h" #define MAXSIZE
阅读全文
摘要://链栈实现 //问题:判断括号式子是否匹配。如{[()]}是匹配的,而{[[])}是不匹配的。 //思路:将式子依次入栈,入栈之前将要入栈的括号与栈顶元素比较,能凑成一对则栈顶元素出栈,不能则该元素入栈。假如匹配,则最后栈必空 //为了方便配对,将每个符号编码 //如"("是-1,")"是1,"[
阅读全文
摘要://想到两种方法,一是用栈把序列逆序对比,二是直接头尾对比字符串。 //问题:判断回文串 如1223不是回文串,而1221是 //思路1:分析以下回文的特点,会发现回文无论是正着读还是反着读都是一样的。所以只要进一次栈,出一次栈,看进入序列是否一样就好了 //思路2:直接判断前半段后半段对应位置是否
阅读全文
摘要:恢复内容开始 null 恢复内容结束
阅读全文
摘要:/*问题:已知带头结点且递增有序的单链表A、B(A、B中元素个数分别为m、n)分别存储了一个集合。设计算法,求A、B的差集 (仅在A中出现不在B中出现),并存在A中,要求保持递增有序性 */ // 思路:由于AB都是递增有序的,用A中的每一个元素与B中的全部元素作比较,若是相同,则删除该元素节点,这
阅读全文
摘要://问题:将长度为n的数组的前端k个元素保持原序移动到数组后端 // 思路:把前k个元素的最后一个元素与数组的最后一个元素交换,前k个元素的倒数第二个元素与数组的倒数第二个元素交换,以此类推。 #include "stdio.h" void KMove(int a[],int k,int n){ /
阅读全文
摘要://问题:设计一个算法,从头节点为head的带表头节点的有序单链表中删除所有数值相同的多余元素并释放节点空间 //思路:单链表已经有序,定义n等于链表的第一个值,向后遍历,若往后有数值相等的,就删除该节点,若遇到数值不相等的,就把值赋给n,这样一直向后 #include "stdio.h" #inc
阅读全文
摘要:// 题目:借助一个数组元素大小的存储单元将数组a逆序 //从数组两头开始向内扫并交换 #include "stdio.h" void reverse(int a[],int n){ int tmp; for(int i=0,j=n-1;i<j;i++,j--){ tmp = a[i]; a[i]
阅读全文
摘要://真题:将带头节点的链表逆置,不能占用额外的空间。 #include "stdio.h" #include<stdlib.h> typedef struct Node{ //结构体 int data; Node *next; }Node; void init(Node *&p){ //初始化 p-
阅读全文
摘要://问题:使用递归将链表中的元素逆序输出 //链表递归逆序输出 #include "stdio.h" #include<stdlib.h> typedef struct Node{ //结构体 int data; Node *next; }Node; void init(Node *&p){ //初
阅读全文
摘要://天勤p32,查找链表(带头结点)中是否存在一个值为x的节点,若存在则删除该节点,并返回x,若不存在则返回0 //思路:其实就是个很简单的遍历问题,唯一的难点就是删除节点。 //删除节点步骤:另它的上一个节点指向它的下一个节点。然后释放该节点的空间 #include "stdio.h" #incl
阅读全文
摘要://天勤p28例2-2:删除顺序表L中下标为p的元素,成功返回1,否则返回0,并将被删除元素的值赋给e //首先要找到p,然后将p后的元素都前移一位,长度-1就可以了 //先写查函数findElem,找到返回位置,找不到返回-1 #include "stdio.h" #define MAXSIZE
阅读全文
摘要://天勤p28,例2-3 //A,B是两条单链表(带表头节点),其中元素递增有序。设计一个算法,将两条链表合并成一条非递减有序的链表 #include "stdio.h" #include<stdlib.h> typedef struct Node{ //结构体 int data; Node *ne
阅读全文
摘要://天勤p26例2-1:已知一个顺序表L,其中的元素递增有序,设计一个算法,插入一个元素后顺序表仍递增有序 //思路:先遍历表,找到插入位置,然后插入位置及之后的元素后移一位。若找不到,直接插到表尾 #include "stdio.h" #define MAXSIZE 100 typedef str
阅读全文

浙公网安备 33010602011771号