#include<iostream>
//#include<stdio.h>
//#include<stdlib.h>
using namespace std;
template<class T>
class Stack
{
public:
T data;
Stack<T>* link;
Stack(const T&el,Stack* ptr=NULL)
{data=el;link=ptr;}
};
template<class T>
class pstack
{
private:
Stack<T>* top;
int size;
public:
pstack(T s=0)
{top=NULL;size=0;}
~pstack(){clear();}
void clear()
{
while(top!=NULL)
{
Stack<T>* temp=top;
top=top->link;
delete temp;
}
size=0;
}
void push(const T item)
{
Stack<T>* tmp=new Stack<T>(item,top);
top=tmp;
size++;
}
T pop()
{
T temp;
if(size==0)
{cout<<"栈为空,不能进行删除!"<<endl;
exit(0);}
else
{
temp=top->data;
Stack<T>* tmp=top;
top=top->link;
delete tmp;
size--;
}
return temp;
}
T Top()
{
T temp;
if(size==0)
{cout<<"栈为空,不能进行删除!"<<endl;
exit(0);}
else
{temp=top->data;}
return temp;
}
bool isempty()
{
if(size==0) return true;
else
return false;
}
};
int main()
{
int a,b,i=1,d;
pstack<int> c;
while(i!=2)
{
cout<<"输入要转换的十进制数:";
cin>>a;
cout<<"输入转换为的进制:";
cin>>b;
if(b>=2&&b<=9)
{
while(a)
{
d=a%b;
c.push(d);
a=a/b;
}
while(!c.isempty())
{cout<<c.pop();}
cout<<endl;
}
else
{cout<<"输入错误!"<<endl;}
cout<<"*******************\n";
cout<<"###1、继续###\n";
cout<<"###2、退出###\n";
cout<<"*******************\n";
cout<<"请选择:";
cin>>i;
system("cls");
}
}
数据结构第三章课后习题5第3小题算法设计
#include<iostream>
//#include<stdio.h>
//#include<stdlib.h>
using namespace std;
template<class T>
class Stack
{
public:
T data;
Stack<T>* link;
Stack(const T&el,Stack* ptr=NULL)
{data=el;link=ptr;}
};
template<class T>
class pstack
{
private:
Stack<T>* top;
int size;
public:
pstack(T s=0)
{top=NULL;size=0;}
~pstack(){clear();}
void clear()
{
while(top!=NULL)
{
Stack<T>* temp=top;
top=top->link;
delete temp;
}
size=0;
}
void push(const T item)
{
Stack<T>* tmp=new Stack<T>(item,top);
top=tmp;
size++;
}
T pop()
{
T temp;
if(size==0)
{cout<<"栈为空,不能进行删除!"<<endl;
exit(0);}
else
{
temp=top->data;
Stack<T>* tmp=top;
top=top->link;
delete tmp;
size--;
}
return temp;
}
T Top()
{
T temp;
if(size==0)
{cout<<"栈为空,不能进行删除!"<<endl;
exit(0);}
else
{temp=top->data;}
return temp;
}
bool isempty()
{
if(size==0) return true;
else
return false;
}
};
int main()
{
int a,b,i=1,d;
pstack<int> c;
while(i!=2)
{
cout<<"输入要转换的十进制数:";
cin>>a;
cout<<"输入转换为的进制:";
cin>>b;
if(b>=2&&b<=9)
{
while(a)
{
d=a%b;
c.push(d);
a=a/b;
}
while(!c.isempty())
{cout<<c.pop();}
cout<<endl;
}
else
{cout<<"输入错误!"<<endl;}
cout<<"*******************\n";
cout<<"###1、继续###\n";
cout<<"###2、退出###\n";
cout<<"*******************\n";
cout<<"请选择:";
cin>>i;
system("cls");
}
}
一、内容:设计算法,把十进制整数转换为二至九之间的任一进制输出。
二、源代码:(如上)
三、运行结果图示:
四、心得体会:
经过对第三章《栈和队列》的课前自主学习,对栈和队列有了初步的了解,其中栈和队列的主要特性分别为“后进先出”、“先进先出”。而且栈分为顺序栈和链栈,队列也分为循环队列和链队列。在预习中也了解到,顺序栈本质上是顺序表的简化,链栈的结点结构和单链表的结点结构相同;队列则是特殊的线性表链队列基本操作本质上也是单链表操作的简化。所以这些知识点之间存在着共同点也存在着各自的特点,在学习中做到比较性理解和记忆可能可以更好地掌握,特别要注意其中的区别,不要弄混。
而本次实验内容便是对栈的初始化、入栈、出栈、取数、判空等基本操作的考察,其中要注意的是本题中还考察了对十进制整数各进制转换的计算和操作。在本次试验中我遇到了不少的困难,由于是还处于初步的自学阶段,所以对栈的一些基本操作原理及处理方法还不是很掌握,所以花费的时间比较多。但是在自我学习的过程中,不但加深了自己对这些知识的了解,还提高了自己的调试并修改程序、查询资料的能力和意识。所以这样的学习方式还是可以很好地锻炼自主学习能力的。