关于算法的思考问题

xrbeck 2002-01-09 01:45:13
想知道各位大虾在思考具体的解决问题的算法的时候
是如何下笔的,小弟都是直接在机子上写的,现在
想想似乎效果不大好,思路会比较混乱,而在纸上写的话,
又比较难转换成程序,想听听各位大虾的意见,谢谢!
...全文
119 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xrbeck 2002-01-16
  • 打赏
  • 举报
回复
谢谢大家。
xrbeck 2002-01-11
  • 打赏
  • 举报
回复
对。这位兄台提到的经验借鉴的问题的确是很不错。。:)
毕竟白手起家比较难。呵呵。
Ngod 2002-01-11
  • 打赏
  • 举报
回复
现在网上找找有没有相似的~!
没有的话就只好自己想了!
前人给我们那么多经验,都可以借鉴啊!
象那些数据结构,算发设计,软件工程不就是这么出来的吗?
毕竟这些都是前辈的心血积累,当然还得根据你的工程的大小和习惯而决定用什么喽!
xrbeck 2002-01-11
  • 打赏
  • 举报
回复
请大家帮忙看看。谢谢。知无不言,言无不尽。百无禁忌。。。:)
xrbeck 2002-01-10
  • 打赏
  • 举报
回复
谢谢。谢谢。。各位都来畅所欲言啊 :)
xrbeck 2002-01-10
  • 打赏
  • 举报
回复
就跟楼上的大虾说的样的“多实践少空谈",来举个例子吧。
现在假设来考虑二叉树按深度遍历的问题:
一开始,因为想到要有节点的进进出出,所以很自然
的就想到了用栈,可是又仔细想想,栈的顺序不对,应该
是一种FIFO的关系,就想到了队列,然后具体细节化一下
就应该是把左右子树进队,然后取队头的元素再进行进队,
这样的话正好完成目的,描述如下:
while(队空)
{
如果有左子树
进队
如果有右子树
进队

打印队头节点,进行循环
}
按照思路给出具体的算法如下:
//----------------------------------------------------
// 按照深度来遍历 ,用队列的方式
void DeepOrder(pnode root)
{

pLinkNode head,p,q;
if(!root)
{
printf("The Tree is empty\n");
return;
}

head=(pLinkNode)malloc(LinkLen);
head->pdata=root;
head->next=NULL;

while(head)
{
printf("%c\t",head->pdata->data);
p=head;

// 应该找在队列最后
while(p->next)
{
p=p->next;
}

if(head->pdata->lchild) // 有左子树可以进队列
{
// 产生一个新节点等于左子树
q=(pLinkNode)malloc(LinkLen);
q->pdata=head->pdata->lchild;
q->next=NULL;

// 进入队列
p->next=q;
p=p->next;

}
if(head->pdata->rchild) // 有右子树可以进队列
{
// 产生一个新节点等于右子树
q=(pLinkNode)malloc(LinkLen);
q->pdata=head->pdata->rchild;
q->next=NULL;

// 进入队列
p->next=q;
p=p->next;
}

// 释放当前节点
// p=head;
head=head->next;
// free(p); // memory leak...
}

}
//----------------------------------------------------
其中结构体格式如下:
// 二叉树节点
typedef struct tagNode
{
char data;
struct tagNode *lchild,*rchild;
}node,*pnode;

// 为了深度遍历的指针队列
typedef struct tagLinkNode
{
struct tagNode *pdata;
struct tagLinkNode *next;
}LinkNode,*pLinkNode;

# define LinkLen sizeof(LinkNode)
# define Len sizeof(node)

上面就是小弟刚才在思考这个问题的一个过程,当然题目本身没什么,主要是想
请大家对小弟的思路进行批评和指正,看看那些方面不足,比如说一开始思考
的切入点等等,谢谢大家了!
kld3000 2002-01-10
  • 打赏
  • 举报
回复
其实, 数据结构就是学习的一种思维过程
有了这个思想, 有了这个想法, 再去编
当然是在纸上画好流程图, 再上机去弄
这样好一点
不过一些最基本的东西, 最基本的程序段, 你至少应该记得
否则,呵呵, 太难了
wanbaocheng 2002-01-09
  • 打赏
  • 举报
回复
首先把解决问题的算法弄清楚,接下来的编程就是小意思了,不过一些细节还是要注意的,多实践少空谈。
上海大闲人 2002-01-09
  • 打赏
  • 举报
回复
每个人通常都有自己的习惯,同时对它也很自信。
一般的小程序都是孕育脑中,不用去画流程图,但当写一个大的项目时,流程图(包括接口)就很重要了,要写一个强壮的软件,这是必须的一步。
抛砖引玉!
starfish 2002-01-09
  • 打赏
  • 举报
回复
upig(路过的)说的没错
只要想清楚了,编程实现是很容易的事情
如果你觉得想出来了算法但编程实现不容易,那要么就是你并没有把问题想清楚,要么就是你的编程能力不够(数据结构等基础知识掌握的不好)。
思考和实现的时候,你要学会自顶向下的程序设计思想,先把整体框架搭出来,然后再慢慢的填充细节
eagle_canfly 2002-01-09
  • 打赏
  • 举报
回复
将注解一并写在函数声明后,in C++ clear
xrbeck 2002-01-09
  • 打赏
  • 举报
回复
不错不错。不过似乎意犹未尽,各位大虾快来啊 :)
upig 2002-01-09
  • 打赏
  • 举报
回复
对于数据算法的东西
若不太大,就先在心中想清楚,
胸有成竹后就可以开始编了。
若你觉得想到的东西可能记不住,就可以写在纸上,只要写大体就成了.
若是很大的算法,可以先细分,粗分,然后照上面做。
jimsuker 2002-01-09
  • 打赏
  • 举报
回复
放在脑子里
hydra1101 2002-01-09
  • 打赏
  • 举报
回复
rational还不错。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧