数据结构
文章平均质量分 59
番茄那个西红柿_z
不负韶华
展开
-
链表面试题(二)
1、单链表排序(冒泡排序)用三个指针来实现该功能,p1初始化为pHead,p2初始化为pHead->pNext,pEnd初始化为NULL,当p2不等于pEnd时,p1和p2的data进行比较,如果p1的data大于p2的data,p1和p2的值交换,否则p1和p2继续向后访问,pEnd指向pHead->pNext时,循环结束。 优化:创建一个标志位IsChange,如果交换将其置...原创 2018-06-02 17:41:06 · 267 阅读 · 0 评论 -
链表面试题(三)
1、判断两个链表是否相交,若相交,求交点。(假设链表不带环)函数实现的功能为,判断相交,相交返回交点的数据,不相交返回-1。函数实现源程序//判断是否相交,不带环int HasCross(SList *pHead1,SList *pHead2){ SList *pNode1 = pHead1; SList *pNode2 = pHead2; if((p...原创 2018-06-03 10:31:47 · 200 阅读 · 0 评论 -
链表面试题(四)
复杂链表的复制。一个链表的每个节点,有一个next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。思路:要实现这个功能,可以通过一下几个步骤。每次创建新节点放在旧节点后边,先将所有的节点复制过来;遍历所有老节点,设置老节点后面的新节点的random;把链子拆开。 ...原创 2018-06-03 22:19:21 · 184 阅读 · 0 评论 -
时间复杂度以及空间复杂度
为了编写出一个“好”程序,必须分析待处理的对象的特征以及各处理对象之间存在的关系。一般来说,用计算机解决一个具体问题时,大致需要以下几个步骤:首先要从具体的问题抽象出一个适当的数学模型,其次设计一个解决该数学模型的算法,编写出程序,并进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间的关系,然后用数学加以描述。 因此,我们可以说程序设计=数...原创 2018-05-28 17:34:06 · 630 阅读 · 1 评论 -
单向链表
单向链表该程序实现了单向链表的增、删、查。头文件:#ifndef __SLIST_H__#define __SLIST_H__#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int DataType;typedef struct SList{ ...原创 2018-06-01 18:40:13 · 341 阅读 · 0 评论 -
双向链表
双向链表头文件DList.h:#ifndef __DLIST_H__#define __DLIST_H__#include <stdio.h>#include <assert.h>#include <stdlib.h>typedef int DataType;typedef struct DList{ DataType d...原创 2018-06-01 18:44:48 · 237 阅读 · 0 评论 -
链表面试题(一)
本文所有的函数都是在上一篇单链表的基础上建立的。1、从尾到头打印链表分析:如下图所示,单链表为1、2、3、4、NULL,题目要求从尾到头打印,即打印的效果为4、3、2、1、NULL。我们可以用递归和循环来实现这一功能。 递归:递归的结束条件为pNodet为空,代码比较简单。循环:可以定义两个指针,一个用来遍历链表,一个用来结束循环。如图所示,用pNode来遍历链表,让pNode从...原创 2018-06-01 18:47:18 · 565 阅读 · 0 评论