
DS算法
风的语言_
算法逻辑黑洞领头人
展开
-
将带头单链表L逆置(不能建立新的节点,通过表中已有节点重新组合)2020.11.11
思想:利用单链表头插法将L第一个有数据信息的节点及之后的节点依次插入到L中 关键:将单链表L置为空第一个是用q指针保存原始链表的后继节点,逆置p p节点始终为旧链表的开始节点,完成头插。void Reverse(LNode *&L){ LNode p=L->next; LNode q; L->next=NULL; //将L指向下一个节点的指针置为空 while(p!=NULL) { q=p->next;原创 2020-11-11 16:55:17 · 474 阅读 · 0 评论 -
元素类型为整型的顺序表L,将其所有小于表头元素的整数放在前面,小于表头的放在后面2020.11.11
思想:以顺序表第一个表头元素为枢纽,进行一次快速排序即可;typedef struct { int data[maxSize]; int length;}SqList;void Sort(SqList &L){ int i,j; int temp; i=0; j=L.length-1; temp=L.data[i]; while(i<j) { while(i<j&&temp<L.data[j]) --j; if(i<原创 2020-11-11 16:11:16 · 357 阅读 · 0 评论 -
直插排序2020.11.10
思想:对顺序表或一维数组进行直接插入排序。把无序序列的一个关键字作为有序序列,从之后的无序序列一次插入到有序序列当中,将待插关键字与有序序列从后往前依次比较,若比有序序列第j个关键字小,则将第j个及其以后的关键字后移,将待插关键字插入到第j个位置,直到无序序列中所有关键字都已插入,排序结束。直插、折半、希尔都是插入类排序,该类排序特点是在未完成一趟排序之前,所有的关键字均未到达最终为位置。性能分析:最坏情况下 逆序 执行次数n*(n-1)/2次 时间复杂度为O(n²);原创 2020-11-10 23:00:57 · 138 阅读 · 0 评论 -
快速排序2020.11.08
快速排序思想:将第一个关键字作为枢纽,表头记为i,表尾的记为j。表尾从表尾开始往前依次扫描,直到找到一个比该枢纽小的关键字,与枢纽所在的位置进行交换,交换后,从表头的位置上依次向后扫描,找到一个比枢纽大的关键字,与j的位置的关键字进行交换,i,j交替依次进行,直到i=j结束该趟排序。快排是将一个序列根据某个关键字进行划分,使其左子表的元素都小于该关键字,右子表的元素都大于该关键字,然后再对左子表和右子表分别进行快排,是整个序列有序。是一个递归算法,越无序,效率越高。最坏时间复杂度为O(N²),平均时间复原创 2020-11-08 22:16:48 · 154 阅读 · 0 评论 -
带头非递增无序单链表删除重复节点
带头非递增无序单链表删除重复节点 (保留第一个节点,删除后续重复节点)如[1,3,4,1,2,1]执行操作后变为[1,3,4,2]// 非递归实现去重NODE *Delete(LNODE *L){ NODE *p,*q,*r; p = head->next; // 适用于有头节点的单链表;对于不带头节点的单链表,此处改为 p=head 即可。 while(p != NULL) // p用于遍历链表 { q = p; whi原创 2020-11-07 23:25:31 · 258 阅读 · 0 评论