我最近在学堆栈和链表,在编程时发现的问题,写如下: //堆栈的基本操作与应用练习(数据的进制转换) //首先由用户输入两个整数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"); } //////////////////////////////////////////////////////////////////////// 就是链表最后的指针,指向不对造成的.请大家发表看法.