ngaut
asm/c/c++/......
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(28)
给我留言
查看公开留言
查看私人留言
随笔分类
(128)
.net winform(1)
(rss)
asio(8)
(rss)
c/c++/ds(47)
(rss)
calculus
(rss)
Compilers:Principles,Techniques,and Tools (21)
(rss)
os study(1)
(rss)
others(50)
(rss)
随笔档案
(169)
2011年5月 (2)
2011年1月 (1)
2010年11月 (1)
2010年9月 (4)
2010年8月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (2)
2010年4月 (3)
2010年3月 (2)
2010年2月 (4)
2010年1月 (1)
2009年12月 (2)
2009年11月 (1)
2009年10月 (2)
2009年9月 (3)
2009年8月 (4)
2009年5月 (1)
2009年4月 (1)
2009年2月 (2)
2008年12月 (2)
2008年10月 (4)
2008年9月 (2)
2008年8月 (3)
2008年7月 (4)
2008年6月 (2)
2008年5月 (1)
2008年4月 (4)
2008年3月 (9)
2008年2月 (5)
2008年1月 (2)
2007年12月 (6)
2007年11月 (3)
2007年10月 (2)
2007年8月 (1)
2007年7月 (1)
2007年6月 (3)
2007年5月 (1)
2007年4月 (9)
2007年3月 (1)
2007年2月 (11)
2007年1月 (1)
2006年12月 (3)
2006年11月 (4)
2006年10月 (3)
2006年9月 (6)
2006年8月 (4)
2006年7月 (10)
2006年6月 (3)
2006年5月 (5)
2006年4月 (2)
2006年3月 (1)
2006年1月 (2)
2005年12月 (10)
文章分类
NetWork
(rss)
文章档案
(3)
2008年10月 (2)
2008年4月 (1)
others
.net 设计模式牛人
da hua xi you
hzbairly的专栏
先瞄准目标市场再研发产品
linux内核
linux内核
linux牛人,调侃风格
经典
os 教程
os开发教程
Winter实验室
某牛
用MSVC开发os
用MSVC开发os
something special
http://vm-kernel.org/blog/
vm and kernel
joshua_yu
网络牛人
垃圾堆
安全高手
经典的c/c++
absurd的专栏
C++ 有价值blog索引(不断更新)
C++ 有价值blog索引
cppblog的猛男
cppblog的猛男
cppreference
c/c++ standard library reference
crazy-bit
不论你在什么时候开始,重要的是开始之后就不要停止。 不论你在什么时候结束,重要的是结束之后就不要悔恨
guanwl的专栏
c++仿基因编程
junguo的专栏
设计模式
leotangcw的专栏
some resource aboutwinpcap
linux大牛
linux大牛,也精通windows的说
ralph623的专栏(c++高人)
c++高人
寒星轩
c++高手
熊春雷的专栏
c/c++/flex/bison
一雨田的专栏
设计模式和网络编程
又一个内核的大牛
搜索
积分与排名
积分 - 395038
排名 - 60
最新评论
1. re: 当asio::async_read与socket的async_read_some的区别
多个客户端同时发送数据,m_packet不会出问题?这个读取是多线程的还是单线程的呢?
--xgg
2. re: 当asio::async_read与socket的async_read_some的区别
谢谢大哥的博客,看了你的这篇文章的时间,很是崇拜您
--杨立平
3. re: 二叉树的遍历:前序,中序输出有点问题,但是不知道到怎么修改,想请教各位大神
评论内容较长,点击标题查看
--呆呆笨笨的孩纸
4. re: 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
我自己写的
http://lk1ngaa7.cf/?p=318
--lking
5. re: 解决unresolved external symbol "public: int __thiscall CWnd::KillTimer(unsigned int)" (?KillTimer@CWnd@@QAEHI@Z)问题
评论内容较长,点击标题查看
--lebesgue06
阅读排行榜
1. 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(91534)
2. 解决error C2011: 'fd_set' : 'struct' type redefinition问题(16420)
3. 介绍一款国产开源C编译器(14391)
4. 解决unresolved external symbol "public: int __thiscall CWnd::KillTimer(unsigned int)" (?KillTimer@CWnd@@QAEHI@Z)问题(13260)
5. Database disk image is malformed 解决办法(11015)
评论排行榜
1. 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(21)
2. 《自己动手写嵌入式操作系统》源代码(14)
3. 看了两天boost::asio网络库相关的资料,写了个小程序用异步tcp方式来传文件,果然高效,速度稳定在10M/s左右(13)
4. 前段时间做的部分笔试题和答案(提醒自己)(9)
5. 最近写了个小工具,自动往代码里面加入垃圾代码(9)
Powered by:
博客园
模板提供:
沪江博客
|
首页
|
发新随笔
|
发新文章
|
联系
| |
管理
数据结构笔记:递归实现链表的逆序输出
/**/
/*
*******************************************************************
created: 2005/12/22
created: 22:12:2005 14:06
filename: ReservePrint.c
author: Liu Qi
purpose: 链表的逆序输出
********************************************************************
*/
#include
<
stdio.h
>
#include
<
assert.h
>
#include
<
time.h
>
#include
"
../sllist.h
"
#define
MAX_NUM 10
/**/
/*
===========================================================================
** Function name: GetRandList
** Parameter: void
** Precondition: void
** Description: 构造一个由随机数组成的链表
** Return value: 链表的头节点指针
** Author: Liu Qi, 2005/12/18
===========================================================================
*/
List GetRandList(
void
)
{
int
i;
List L
=
SLL_Create();
srand( (unsigned)time( NULL ) );
for
( i
=
0
; i
<
MAX_NUM; i
++
)
{
SLL_PushFront(rand()
%
20
, L);
}
return
L;
}
/**/
/*
===========================================================================
* Function name: ReservePrint
* Parameter: L: 链表头指针
* Precondition: NULL != L
* Description: 递归实现链表的逆序输出
* Return value: void
* Author: Liu Qi, [12/22/2005]
===========================================================================
*/
void
ReservePrint(List L)
{
assert( NULL
!=
L );
if
(NULL
!=
L
->
Next)
{
ReservePrint(L
->
Next);
}
else
{
//
递归出口,一般把递归出口写作前面^_^
}
printf(
"
%d
"
, L
->
Element);
}
int
main(
int
argc,
char
*
argv[])
{
List L
=
GetRandList();
SLL_PrintList(L);
printf(
"
\n
"
);
ReservePrint(L
->
Next);
printf(
"
\n
"
);
SLL_DeleteList(L);
return
0
;
}
递归是个好东西啊,搞明白了觉得逻辑很清晰,结构也很好,就是效率不高^_^,用栈来模拟递归看起来就不好懂了。
发表于 2005-12-22 16:13
ngaut
阅读(3254)
评论(7)
编辑
收藏
引用
所属分类:
c/c++/ds
评论
#
re: 数据结构笔记:递归实现链表的逆序输出
回复
更多评论
用栈的话这样实现:
void ReservePrint(List L)
{
assert( NULL != L );
int count = 0;
int temp;
while (NULL != L->Next)
{
++count;
temp = L->Next;
__asm push temp;
L = L->Next;
}
while(--count>=0)
{
__asm pop temp;
printf(" %d ", temp);
}
}
#
re: 数据结构笔记:递归实现链表的逆序输出
回复
更多评论
个人觉得存在先进后出的结构时用栈实现更好理解,这里用栈来实现似乎更加好理解一些^_^,另外你的代码有点瑕疵,这里内嵌汇编不合适吧,因为不确定链表的长度,如果大于操作系统给ReservePrint分配的堆栈就会overflow了,不知是否正确^_^
#
re: 数据结构笔记:递归实现链表的逆序输出
回复
更多评论
如果会overflow,你的递归方法一样会overflow,因为函数调用,都是使用堆栈来传递参数。
#
re: 数据结构笔记:递归实现链表的逆序输出
回复
更多评论
是啊,多谢老兄指点,不过你好像误解我的意思了(其实是我自己没有说清楚)^_^
我的意思是:另外实现一个堆栈,比如链栈,而不是直接用该函数自己的栈,这样就不会overflow了
#
re: 数据结构笔记:递归实现链表的逆序输出
回复
更多评论
嗯,默认状态,堆栈大概可以push 250,000 个int,当然这个大小也是可以调整的。
我这样写,主要也是从效率上考虑,使用原始的stack,飞快哦!
#
re: 数据结构笔记:递归实现链表的逆序输出
回复
更多评论
很好的程序,学习了。3k
#
re: 数据结构笔记:递归实现链表的逆序输出
回复
更多评论
printStack(Stack s){
Object o = s.pop();
if(o == null)
return;
printStack(s);
println(o);
}
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
ndis笔记--ReceiveHandler如何处理不完整的包
[转]Google C++ Testing Framework Primer
[转]Visual C++开发工具与调试技巧整理
[转]Add color to your std::cout
[转]Huffman编码STL版--来自fxsjy的专栏
一个简单的递归下降分析表达式的例子
编译boost库-用vc2005编译boost1.34.1
如何解决"找不到MSVCR80.dll "的问题
boost asio发送0字节的数据时,接收端提示"找不到指定文件"
release版本的程序提示需要MFC42D.dll的原因
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理