数据结构
shiny__zhang
这个作者很懒,什么都没留下…
展开
-
选择排序
算法:给定一个数组,每次都选择待排序序列中的最小值并放到待排序序列的第一个位置上代码:void SelectSort(int *arr,int len){ int minIndex; int tmp; for(int i=0;i<len-1;i++) { minIndex = i; //最小值下标 for(int j=i+1;j<len;j++)//找最小值 { if(arr[minIndex] > arr[j]) {原创 2020-06-13 09:54:55 · 88 阅读 · 0 评论 -
冒泡排序
算法:给出一个数组,从第一个数据开始,依次与后面的数据进行比较,如果遇到比它小的数字就交换。原创 2020-06-11 18:06:29 · 82 阅读 · 0 评论 -
希尔排序
算法:分组再利用插入排序,也称为缩小增量排序代码://一趟shell排序,gap:分组数(间隔)static void Shell(int *arr,int len,int gap){ int tmp; int i; int j; for(i=gap; i<len; i++) { tmp = arr[i]; for(j=i-gap; j>=0; j-=gap) { if(arr[j]>tmp) { arr[j+g原创 2020-06-06 17:33:42 · 86 阅读 · 0 评论 -
插入排序
算法:给定一个数组,从最后一个数据开始和前面的数据依次进行比较,如果遇到小于等于它的数据则将它插入后面。例:给定一个数组 5,4,9,7 经过第一躺排序为:5,4,7,9 经过第二趟排序为:4,5,7,9 ...原创 2020-06-06 16:53:36 · 57 阅读 · 0 评论 -
给定两个单链表,判断是否有交点,如果有则返回第一个交点
算法:得到两条链的长度m和n,再定义两个指针p1和p2,分别指向两条链的开头,如果m>n,则让p1先走m-n步,如果n>m,则让p2先走n-m步,然后两个指针再一起走,相遇的第一个点就是第一个交点,若不相遇则没有交点。(两个链表都无环)(相交的特征:只要两条链表相交,则从第一个交点开始后面的节点都相交)注:还要就链表是否有环的情况进行分类讨论。 (1)如果一个有环一个无环则肯定不相交 (2)都有环但是两个链表不相交 (3)都有环且相交有环情况...原创 2020-06-03 21:41:52 · 343 阅读 · 0 评论 -
如何判断单链表是否有环
算法:定义p,q两个指针,p一次走一步,q一次走两步,如果q能一直走到尾说明没有环,如果前进过程中p与q相遇了则说明有环。具体代码:Node *IsLoop(List plist)//检测单链表是否有环{ assert(plist!=NULL); if(plist==NULL || plist->next==NULL) { return NULL; } Node *p=plist->next; //慢指针,一次走一步...原创 2020-05-25 16:31:04 · 133 阅读 · 0 评论 -
单链表的逆置
单链表的逆置是面试常考察的题型下面总结做这个题型的两种方法:1.数据结构中栈的思想,先进后出,后进先出(利用数组模拟栈)代码如下:void Reverse(List plist){ int *arr = (int *)malloc(Gentlength(plist)*sizeof(int));//模拟栈(Getlength函数作用是得到plist中有效数据的长度) assert(arr!=NULL); int i=0;原创 2020-05-08 20:36:46 · 769 阅读 · 1 评论