数据结构与算法
文章平均质量分 67
liujiejieliu1234
这个作者很懒,什么都没留下…
展开
-
线性表之顺序存储结构--C实现
线性表(list) 一、线性表定义 线性表是0或多个元素组成的有序序列,若将线性表记为:(a1, ..., ai-1, ai, ai+i, ..., an),则称ai-1是ai的直接前驱元素,ai+1为ai的直接后继元素,当i=1, 2, ..., n-1时,ai有且只有一个直接后继元素,当i=2, 3, ..., n时,ai有且只有一个直接前驱元素。线性表中元素的个数n(n>=0)定义为线性转载 2015-04-21 22:44:23 · 482 阅读 · 0 评论 -
函数查找一个整数数组中第二大的数
#include using namespace std; const int MINNUMBER = -32767; int find_set_max(int data[], int count) { int maxnumber = data[0]; int sec_max = MINNUMBER; for (int i = 1; i {原创 2015-05-28 14:30:57 · 560 阅读 · 0 评论 -
约瑟夫问题
已知 n 个人(以编号1, 2, 3 ,4, 5 ,6 ... .. .n)围坐一张圆桌周围。从编号为k 的人开始报数,数到m 的那个人出列;他的下一个人又从 1开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。请用C++编程。 整个程序分为3个步骤: 第一步:建立一个有n个元素的循环链表,链表是从1的编号开始的。 第二步:是从链表的表头数到第 k -原创 2015-06-24 20:21:03 · 359 阅读 · 0 评论 -
链表倒序
Node *Reverse(Node *head) { Node *p1,*p2,*p3; if(head==NULL||head->NULL) return head; p1=head; p2=p1->next; while(p2) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } head->next=NULL; he原创 2015-06-24 20:46:12 · 422 阅读 · 0 评论 -
大数的乘法(包括浮点数)
一.大数乘法 我们知道,要运算两个数的乘法,c、c++语言里有专门的运算符*。但是当两个数超过一定的范围时,用普通的运算符会产生溢出,并不能得到正确的结果。如何进行运算呢? 首先,要想保存一个大数,用正常的整形或浮点类型是不够的。所以我们可以采用字符串的形式对大数进行保存,然后编写算法,模拟乘法运算过程即可。 1.第一个问题:两个数字运算结果至多用多少位的字符串保存呢转载 2015-04-22 19:00:22 · 957 阅读 · 1 评论 -
八大排序算法之三简单选择排序(c语言)
选择排序—简单选择排序(Simple Selection Sort) 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出转载 2015-04-22 19:18:25 · 945 阅读 · 0 评论 -
八大排序算法之二希尔排序(C语言)
希尔排序是一种插入排序法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。 基本思想: 不断把待排序的对象分成若干个小组,对同一小组内的对象采用直接插入法排序,当完成了所有对象都分在一个组内的排序后,排序过程结束。每次比较指定间距的两个数据项,若左边的值小于右边的值,则交换它们的位置。间距d按给定公式减少: di+1 =(di +1)/2 ,直到d等于1转载 2015-04-22 15:57:10 · 1277 阅读 · 0 评论 -
八大排序算法之一直接插入排序(C语言)
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,原创 2015-04-22 15:06:04 · 14851 阅读 · 2 评论 -
关于链表中头指针和头结点的理解
线性表使用顺序(数组)存储时有个弊端,那就是在插入和删除时需要大量的移动数据,这显示是非常消耗时间的,所以可以采用链式存储,即有一个指针域(单链表),来记录下个结点的存储位置(地址),这样在插入和删除结点时只需要修改指针域即可,从而大量减少移动数据所消耗的时间。来看链表的定义: struct node { int data; struct node *next; }; 其中有两个元素转载 2015-04-21 21:28:09 · 661 阅读 · 0 评论 -
欧几里德算法
欧几里德算法用于求两个正整数m和n的最大公因子,即能同时整除m和n的最大正整数。 欧几里德算法描述如下:以n除m并令r为所得余数,若r = 0,算法结束,n即为答案,否则置m = n,n = r,再让n除m,直到余数为0。 c语言实现代码如下: unsigned int gcd(unsigned int m, unsigned int n) { unsigne转载 2015-04-21 21:56:37 · 297 阅读 · 0 评论 -
数组中未出现的最小正整数
【题目】 给定一个无序整型数组arr,找到数组中未出现的最小正整数。 【举例】 arr=[-1,2,3,4]。返回1。 arr=[1,2,3,4]。返回5 #include using namespace std; int missNum(int *arr,int length); int main() { int arr[4]={1,2,4,5}; c原创 2015-09-07 21:53:02 · 1068 阅读 · 0 评论