![]() |
#2
pangding2010-04-17 10:59
|

// 0415.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdlib.h>
const int nlen = 4; //分配初始内存大小
const int nadd = 2; //内存不足,增加内存
struct stack
{
int *pa;
int *pb;
int nsize;
};
void create(stack &s);
void push(stack &s,int e); //插入元素
void pop(stack &s, int &e); //删除元素
bool empty(stack &s); //判断栈是否为空
void destory(stack &s); //销毁栈
int main(int argc, char* argv[])
{
while(1)
{
stack sql;
create (sql);
cout<<"please input a number:"<<endl;
int nt;
int e ;
cin>>nt;
if(0 == nt) //当输入0时,退出循环
{
return 0;
}
while(nt)
{
push(sql, nt%8); //10进制数除以8,余数进栈
nt = nt/8;
}
while(!empty(sql)) //余数出栈
{
pop(sql, e);
cout<<e;
}
cout<<endl;
free(sql.pa);
//system("cls");
//delete [] sql.pa;
}
return 0;
}
void create(stack &s)
{
//s.pa = new int[nlen];
s.pa = (int *)malloc(nlen * sizeof(int));
if(!s.pa)
{
return ;
}
s.pb = s.pa;
s.nsize = nlen;
}
void push(stack &s, int e)
{
if(s.pb - s.pa >= s.nsize)
{
//delete [] s.pa;
//s.pa = NULL;
//s.pa = new int[(s.nsize + nadd)];
s.pa = (int *)realloc(s.pa,(s.nsize + nadd) * sizeof(int));
if(!s.pa)
{
cout<<"memory error!"<<endl;
}
s.pb = s.pa + s.nsize;
s.nsize += nadd;
}
*(s.pb++) = e;
}
void pop(stack &s, int &e)
{
if(s.pa == s.pb)
{
cout<<"error"<<endl;
}
e = *(--s.pb);
}
bool empty(stack &s)
{
if(s.pa == s.pb)
{
return true;
}
else
return false;
}
void destory(stack &s)
{
}
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdlib.h>
const int nlen = 4; //分配初始内存大小
const int nadd = 2; //内存不足,增加内存
struct stack
{
int *pa;
int *pb;
int nsize;
};
void create(stack &s);
void push(stack &s,int e); //插入元素
void pop(stack &s, int &e); //删除元素
bool empty(stack &s); //判断栈是否为空
void destory(stack &s); //销毁栈
int main(int argc, char* argv[])
{
while(1)
{
stack sql;
create (sql);
cout<<"please input a number:"<<endl;
int nt;
int e ;
cin>>nt;
if(0 == nt) //当输入0时,退出循环
{
return 0;
}
while(nt)
{
push(sql, nt%8); //10进制数除以8,余数进栈
nt = nt/8;
}
while(!empty(sql)) //余数出栈
{
pop(sql, e);
cout<<e;
}
cout<<endl;
free(sql.pa);
//system("cls");
//delete [] sql.pa;
}
return 0;
}
void create(stack &s)
{
//s.pa = new int[nlen];
s.pa = (int *)malloc(nlen * sizeof(int));
if(!s.pa)
{
return ;
}
s.pb = s.pa;
s.nsize = nlen;
}
void push(stack &s, int e)
{
if(s.pb - s.pa >= s.nsize)
{
//delete [] s.pa;
//s.pa = NULL;
//s.pa = new int[(s.nsize + nadd)];
s.pa = (int *)realloc(s.pa,(s.nsize + nadd) * sizeof(int));
if(!s.pa)
{
cout<<"memory error!"<<endl;
}
s.pb = s.pa + s.nsize;
s.nsize += nadd;
}
*(s.pb++) = e;
}
void pop(stack &s, int &e)
{
if(s.pa == s.pb)
{
cout<<"error"<<endl;
}
e = *(--s.pb);
}
bool empty(stack &s)
{
if(s.pa == s.pb)
{
return true;
}
else
return false;
}
void destory(stack &s)
{
}
我的重新分配为什么失败了,求解。另外我发现了一个有趣的事情,就是我把初始分配大小设为10000(大的数字可以看出内存变化),不释放指针,每输入一次数字,该程序占用内存增加40kb,正好1w个int占用的内存大小,可惜无法看到增添内存的变化情况(数值太小)!