![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Forrit
这个作者很懒,什么都没留下…
展开
-
循环单链表
以带头结点的循环单链表为例:普通的单链表的尾指针指向的是NULL;而循环单链表的尾指针指向的是头节点;这就要求循环单链表在定义的时候出现的一些不同:初始化时,需要将头结点的next指针指向它自己判空条件,L->next==L;判断p是否为尾节点的条件:p->next==L...原创 2021-11-28 16:31:04 · 3227 阅读 · 0 评论 -
二叉树的非递归遍历
// 先序遍历的非递归实现void pre_order(BinTree b){ InitStack(S); while(b!=null||!IsEmpty(S)) { if(b!=null) { visit(b); Push(S,b); b=b->lchild; } else { Pop(S,b); b=b->rchild; } } } // 中序遍历的非递归实现 void in_order(BinTree b)原创 2021-11-08 14:49:50 · 184 阅读 · 0 评论 -
试给出二叉树自下而上、自左而右的遍历算法
//试给出二叉树自下而上、自左而右的遍历算法void order(BinTree b){ InitQueue(Q); //初始化一个队列 InitStack(S); //初始化一个栈 EnQueue(Q,b); //入队列 while(!Empty(Q)) //循环条件为队列非空 { DeQueue(Q,b); //队头元素出队 Push(S,b); //将出队元素放入栈中 if(b->lchild!=NULL) EnQ原创 2021-11-08 14:16:56 · 439 阅读 · 0 评论 -
判断二叉排序树
//判断是不是二叉排序树int pre_data=0; //当前遍历节点的前驱节点的数据,是一个全局变量 int jugdge(BinTree b){ int b1,b2; if(b==null) return 0; else{ b1=judge(b->lchild); //对左子树进行递归判断 if(b1==0||pre_data>=b->data) // 对根节点进行递归判断 return 0; pre_data=b->d原创 2021-11-08 14:04:03 · 215 阅读 · 0 评论 -
循环链式队列
//定义结点typedef struct QNode{ ElemType data; struct QNode *next; }QNode,*QNodeptr; //该结构体含有两个结点指针变量typedef struct{ QNodeptr front;//队头指针 QNodeptr rear;//队尾指针 }LinkQueue;//初始化循环链式队列Status Init_LQueue(LinkQueue *L){ L->rear=L->front.原创 2021-11-02 18:32:46 · 677 阅读 · 0 评论 -
求最近公共祖先
要求:一棵顺序存储的二叉树,按顺序存储方式进行,设计一个算法,求编号为i和j的两个节点的最近公共祖先:int min_parent(int i,int j){ while(i!=j) { if(i>j) //主要操作就是将编号较大的元素不断取一半 i=i/2; else j=j/2; } return i;}...原创 2021-10-19 20:12:20 · 191 阅读 · 0 评论 -
删除单链表中节点值为x的节点
这里用了两种方式实现://这一种方式用来三个指针,一个用来遍历的p指针,一个指向p的前驱的pre指针,还有一个标识目标节点的q指针while(p!=null){ if(p->data==x) { q=p; p=p->next; pre->next=p; free(q); } else { pre=p; p=p->next; } } //这一种方式用来两个指针,一个用来遍历的p指针,一原创 2021-10-19 08:26:47 · 1985 阅读 · 0 评论