| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1173 人关注过本帖
标题:经验和教训(和大家讨论)(1)(堆栈和链表问题)
取消只看楼主 加入收藏
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
 问题点数:0 回复次数:4 
经验和教训(和大家讨论)(1)(堆栈和链表问题)

我最近在学堆栈和链表,在编程时发现的问题,写如下: //堆栈的基本操作与应用练习(数据的进制转换) //首先由用户输入两个整数m.n然后将十进制n转换为m进制数,并显示在屏幕上 //要求和说明: //1.基本操作必须写成过程或函数,主函数只能调用他不准在主函数操作堆栈指针 //2.可处理任意进制数 //3.m的取值范围是236

#include"stdio.h" #include"stdlib.h"

struct node //这是定义的结构体(栈的基本结构) { int d; struct node *next; };

/////////////////////////////////分函数////////////////////////////////

struct node * duizhan(struct node *top,int x) //堆栈开辟和存储 { struct node *p; p=(struct node*) malloc(sizeof(struct node)); //开辟空间把首地址给p p->d=x; //新的空间的值域部分赋键盘输入值 if(top==NULL) top=p; else { p->next=top; top=p; } return(top); }

struct node * chuli(int m,int n) //处理数据并存入堆栈 { struct node *top=NULL; int i=0; int k; for(;n!=0;i++) { k=n%m; n=(n-k)/m; top=duizhan(top,k); } return(top); }

void pp(struct node *top) { int n=0; struct node *q,*p; p=top; while(p!=NULL) //用循环的方式打印线性单链表 { n++; //'n'为换行变量 printf("%3d",p->d); if(n%10==0) printf("\n"); //换行语句 //q=p; p=p->next; //释放q所指向的空间(一个结构体变量) } } ///////////////////////////////////////////////////////////////////////

///////////////////////////////主函数/////////////////////////////////// void main(void) { int m,n; printf("请输入想处理的数(0-32767):"); scanf("%d",&n); printf("请输入想把他处理成几进制的数(2-236):"); scanf("%d",&m); pp(chuli(m,n)); //打印并处理函数 } //////////////////////////////////////////////////////////////////////// 但是在编译运行后有问题,说内存出现问题. 改如下: //堆栈的基本操作与应用练习(数据的进制转换) //首先由用户输入两个整数m.n然后将十进制n转换为m进制数,并显示在屏幕上 //要求和说明: //1.基本操作必须写成过程或函数,主函数只能调用他不准在主函数操作堆栈指针 //2.可处理任意进制数 //3.m的取值范围是236

#include"stdio.h" #include"stdlib.h"

struct node //这是定义的结构体(栈的基本结构) { int d; struct node *next; };

///////////////////////////////分函数////////////////////////////////

struct node * duizhan(struct node *top,int x) //堆栈开辟和存储 { struct node *p; p=(struct node*) malloc(sizeof(struct node)); //开辟空间把首地址给p p->d=x; //新的空间的值域部分赋键盘输入值 if(top==NULL) { top=p; p->next=NULL; } else { p->next=top; top=p; } return(top); }

struct node * chuli(int m,int n) //处理数据并存入堆栈 { struct node *top=NULL; int i=0; int k; for(;n!=0;i++) { k=n%m; n=(n-k)/m; top=duizhan(top,k); } return(top); }

void pp(struct node *top) { int n=0; struct node *q,*p; p=top; while(p->next!=NULL) //用循环的方式打印线性单链表 { n++; //'n'为换行变量 printf("%3d",p->d); if(n%12==0) printf("\n"); //换行语句 q=p; p=p->next; free(q); //释放q所指向的空间(一个结构体变量) } } ///////////////////////////////////////////////////////////////////////

///////////////////////////////主函数/////////////////////////////////// void main() { int m=0,n=0; printf("请输入想处理的数(0-32767):"); scanf("%d",&n); printf("请输入想把他处理成几进制的数(2-236):"); scanf("%d",&m); pp(chuli(m,n)); //打印并处理函数 printf("\n"); } //////////////////////////////////////////////////////////////////////// 就是链表最后的指针,指向不对造成的.请大家发表看法.

搜索更多相关主题的帖子: 链表 堆栈 教训 经验 
2005-03-29 14:42
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 
是 ,我发现这个问题了,写长了大家都不看了.你看看那些红字吧,希望有用,以后我少写点.哈哈.

zhtmark QQ:451361060
2005-04-01 11:01
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 
红色部分是我改过之后的.我错的地方就在红色字部分,
for(;n!=0;i++)是错的吧
这句没错,就是把第一句话放在外面了写了.

zhtmark QQ:451361060
2005-04-03 17:01
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 
这是我的不对.我们学习的就是栈.我听人家说的,应该不是一个东西,我说的不对,至于具体的概念,还需要看看书.我这里说的就是"先进后出,后进先出"的栈.

zhtmark QQ:451361060
2005-04-06 14:24
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 
我现在在学数据结构,觉得有的问题说复杂就能特别的复杂。有些问题看着简单,实现复杂。你说呢?

zhtmark QQ:451361060
2005-05-02 08:51
快速回复:经验和教训(和大家讨论)(1)(堆栈和链表问题)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034255 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved