- 浏览: 75402 次
- 性别:
- 来自: 北京
/** *链表逆序的递归/非递归算法 */ #include <stdio.h> typedef int Item; typedef struct node { Item item; struct node *next; }Node, *List; /*reverse1~2是不带头结点的逆序算法*/ List reverse1(List l) { Node *p1,*p2; if(l==NULL) return l; p1=l->next; l->next=NULL; while(p1!=NULL){ p2=p1->next; p1->next=l; l=p1; p1=p2; } return l; } List reverse2(List l) { if(l==NULL || l->next==NULL) return l; Node *p=reverse2(l->next); l->next->next=l; l->next=NULL; return p; } /*reverse3~4是带头结点链表的逆序算法*/ void reverse3(List l) { Node *p1,*p2,*p3; if(l==NULL || l->next==NULL) return; p1=l->next; p2=p1->next; p1->next=NULL; while(p2!=NULL){ p3=p2->next; p2->next=p1; p1=p2; p2=p3; } l->next=p1; } void reverse4(List l, Node *first)/*此算法不是很好,需要在函数外判断l!=NULL*/ { if(first==NULL || first->next==NULL){ l->next=first; return; } reverse4(l,first->next); first->next->next=first; first->next=NULL; }
发表评论
-
排序算法---计数排序
2011-11-27 14:57 608#include <stdio.h> vo ... -
排序算法---归并排序
2011-11-26 19:33 747#include <stdio.h> vo ... -
排序算法---交换排序(冒泡排序、快速排序)
2011-11-26 19:32 702#include <stdio.h> vo ... -
排序算法---选择排序(简单插入排序、堆排序)
2011-11-26 19:31 647#include <stdio.h> vo ... -
排序算法---插入排序(简单排序、shell排序)
2011-11-26 19:29 649#include <stdio.h> vo ... -
删除字符串中的特定字符和重复字符
2011-11-26 13:45 665#include <stdio.h> vo ... -
Linux编程-多线程、同步和互斥(转载)
2011-11-14 15:27 1209http://www.cnblogs.com/skynet/a ... -
寻找字符串中的最大数字子串
2011-09-22 17:17 1519#include <stdio.h> int f ... -
删除子字符串
2011-09-21 15:27 603#include <stdio.h> #incl ... -
c语言随机数
2011-09-18 17:15 685#include <stdio.h> #i ... -
带头结点有序单链表的合并
2011-09-08 14:21 1184typedef int Item; typedef s ... -
递归算法---字符串---全/部分组合和全排列
2011-08-30 23:01 1222#include <stdio.h> #i ... -
递归算法---0-1背包问题(面试宝典)
2011-08-28 21:11 1898/** *正整数n,m,从数列1、2、3、...、n中随 ... -
递归算法---字符串全组合(面试宝典)
2011-08-28 17:24 1257/** *求一字符串所有字串的组合 */ #i ... -
递归算法---求解多元一次方程
2011-08-28 10:38 1896/** * 求解x1+x2+x3+...+x10 = ... -
(zz)关于类的sizeof
2011-08-27 18:16 587http://blog.sina.com.cn/s/blog_ ... -
(zz)结构体字节对齐原则
2011-08-27 17:53 1578结构体默认的字节对齐一般满足三个准则: 结构体变量的首 ... -
list.h from linux-2.4
2011-08-25 09:59 607#ifndef _LIST_H_ #define _L ... -
The C Programming Lang (K&R) hash table
2011-08-25 09:52 936hash.h #include <stdio.h ... -
Josephus环
2011-08-23 11:20 699/*************************** ...
相关推荐
本次讨论的核心在于如何实现单链表的逆序,特别是采用非递归方法完成这一操作。 ### 单链表逆序的重要性 单链表逆序在实际应用中具有广泛的意义。例如,在处理文本、音频或视频流时,可能需要反转数据流的顺序以...
非递归方法是使用循环来实现链表逆序的。该方法使用三个指针,p、q和temp,来记录当前节点、下一个节点和临时节点。基本思想是将当前节点的next指针指向前一个节点,然后将当前节点移动到下一个节点。代码如下所示:...
非递归版本的快速排序则是不使用递归实现这一算法。 在给定的文档中,`quickpass` 函数实现了快速排序的主要逻辑,即“主元交换”(partition)过程。`quicksort` 函数则负责整体的控制,包括栈的管理以及主元交换...
单链表的合并(递归-非递归)以及将单链表逆序 单链表是数据结构中的一种基本结构,它是一种顺序存储的链式结构。单链表的合并是指将两个或多个单链表合并成一个单链表,而保持原来的顺序。单链表的逆序是指将...
链表反转:递归/非递归 链表/双向链表/队列/栈的实现 链表patition 有随机指针的链表的拷贝 队列 队列实现 双向队列实现 树 前缀树trie实现 二叉树遍历:先序/中序/后序/层序 递归/非递归 二叉树序列化与反序列化 ...
链表是一种非连续、非顺序的存储结构,每个元素称为节点,包含数据域和指针域,通过指针将节点串联起来。下面我们将详细解析链表实现的几种排序算法,以及它们的优缺点。 1. **冒泡排序** (LinkList1.cpp 和 ...
"知名公司数据结构笔试题 经典" 本资源总结了数据结构笔试题中的多种...链表的逆序操作可以使用递归和非递归两种方法实现。 本资源涵盖了数据结构和算法设计的多个方面,能够帮助读者更好地理解和掌握相关知识点。
这个问题在计算机科学中被广泛研究,用于探讨循环链表、数组操作和算法设计。 在上述C#代码中,约瑟夫问题的实现是通过创建一个长度为N的数组,初始化所有元素为1,代表每个人都在圈内。然后通过一个循环,模拟报数...
在这个递归算法中,首先检查链表头部是否需要删除,如果需要,删除并继续处理剩余部分。如果头部不需要删除,则递归处理链表的其余部分。 4. **删除带头结点单链表中所有值为X的结点**: 这个算法同样遍历链表,...
二叉树的先序遍历(非递归算法)** **算法思想**:先序遍历是指根节点→左子树→右子树。非递归实现中,使用栈来存储遍历过程中的节点,以模拟递归过程。初始时,将根节点入栈。当栈不为空或当前节点不为空时,...
后序遍历的非递归算法通常比前序和中序更复杂,因为它需要在访问节点前先访问其左右子树。这通常涉及到维护额外的信息来确定节点是否已经被其子树访问过。 以上数据结构和算法的总结涵盖了线性表和树的一些基本操作...
链表、图和排序算法是计算机科学中的基础数据结构和算法,它们在程序设计和问题解决中扮演着重要角色。本资源"链表、图、排序算法C语言实现.zip"包含的是用C语言编写的链表、图以及排序算法的实现代码,这对于学习和...
二叉树的先序遍历(非递归算法) **算法思想:** 非递归版本的先序遍历主要通过使用栈来实现。当遍历到一个节点时,先访问该节点,然后将其地址压入栈中,再遍历其左子树。当遇到空节点时,从栈中弹出一个节点地址...
- 链表:非连续存储的数据结构,每个元素称为节点,包含数据和指向下一个节点的指针。 - 树:具有层次关系的数据结构,如二叉树、AVL树、红黑树等,广泛用于数据索引和搜索。 - 队列:先进先出(FIFO)的数据结构...
总结来说,本作业涵盖了数据结构与算法的基础知识,包括排序算法的实现与分析、递归与非递归问题的解决、递归算法的时间复杂度计算以及贪心算法的应用。这些知识点是计算机科学中的核心内容,对于理解和提升编程能力...
// 二叉树的后序遍历(非递归算法)将在下一部分继续讲解。 ``` 以上就是从提供的文档内容中提取的关键知识点,包括线性表的各种操作以及二叉树的遍历方法。这些算法都是数据结构学习中的基础内容,对于理解和掌握...
- 链表:单链表、双链表和环形链表。 - 哈希表:存储和查找元素的高效方式。 9. **递归与迭代**: - 递归:函数调用自身解决问题,如阶乘、斐波那契数列。 - 迭代:通过循环结构解决问题,通常比递归更节省空间...
1. 冒泡排序:基础排序算法,通过不断交换相邻的逆序元素来逐步理顺数组。 2. 插入排序:将元素逐个插入到已排序部分,保持有序状态。 3. 选择排序:找到最小(或最大)的元素与当前位置交换,直到所有元素排序完成...
给出的参考代码展示了如何使用非递归的方法进行链表逆序。核心思想是遍历链表,逐个反转链表中的节点指针。这个过程中,需要维护三个指针:prev、pcur 和 next,其中 prev 用于记录当前节点的前一个节点,pcur 是...
3. 链表:非连续存储的数据结构,每个元素包含数据和指向下一个元素的指针。 4. 树:由节点和边构成的层次结构,如二叉树、平衡树(AVL树、红黑树)等。 5. 图:由顶点和边构成的数据结构,用于表示对象之间的关系。...