用C++语言编写一个栈的类模板希望能够把要求的都实现出来谢谢。不好意识没财富了哪位好心帮写下下回补上。

作者&投稿:窦唯 (若有异议请与网页底部的电邮联系)
c++用模板编写栈的细节~

感觉代码有点问题,pop一般是需要函数返回顶部节点,但是这里却new并delete 看不懂。

top=top->link 好理解,就是修改栈顶元素。

是析构函数里面有问题。

linknode * del=top;
while(top)
{
top=top->link;
delete del;
del = top;
}

# include <iostream>

template <class T>
class Stack
{
private:
int max;
int length;
T *stack;
public:
Stack(int size):max(size), length(0), stack(new T[size]) {}
~Stack()
{
delete[] stack;
}
void push(T val)
{
if(length != max)
stack[length++] = val;
}
void pop(void)
{
if(length)
--length;
}
int size(void)
{
return length;
}
int size(void) const
{
return length;
}
T top(void)
{
if(length != 0)
return stack[length-1];
}
T top(void) const
{
if(length != 0)
return stack[length-1];
}
bool empty(void)
{
return (length == 0);
}
bool empty(void) const
{
return (length == 0);
}
friend std::ostream &operator <<(std::ostream &os, const Stack<T> &stk); //这种写法其实是错误的,但是在VC6.0中能编译通过,VC6.0对模板的某些特性并不支持
};

template <class Type>
std::ostream &operator <<(std::ostream &os, const Stack<Type> &stk)
{
int begin, end = stk.size();
for(begin = 0; begin != end; ++begin)
{
os<<stk.stack[begin];
if(begin != end-1)
os<<'\t';
}
return os;
}

int main(void)
{
Stack<int> i_stk(20);
i_stk.push(4);
i_stk.push(5);
i_stk.push(6);
std::cout<<i_stk<<std::endl;
i_stk.pop();
std::cout<<i_stk<<std::endl;
Stack<char> c_stk(20);
c_stk.push('a');
c_stk.push('b');
c_stk.push('c');
std::cout<<c_stk<<std::endl;
c_stk.pop();
std::cout<<c_stk<<std::endl;
Stack<float> f_stk(20);
f_stk.push(1.2);
f_stk.push(2.3);
f_stk.push(3.4);
std::cout<<f_stk<<std::endl;
f_stk.pop();
std::cout<<f_stk<<std::endl;

return 0;
}

template<class T>
class Stack {
public:
Stack(int size) : length(size), tos(0) { stack = new T[length]; }//用户提供栈长进行初始化
~Stack() { delete [] stack; }
void push(T data) {stack[tos++] = data; } //入栈
T pop() { return stack[--tos]; } //出栈
bool empty() { return !tos; } //判断栈是否为空
bool full() { return tos >= length; } //判断栈是否已满
private:
int tos, length;
T* stack;
}; //模板不检测出入栈是否越界,出栈操作需要用户自行判定栈是否为空,入栈需要用户自行判定栈是否已满。

告诉你个最简单的投机取巧的方法⋯⋯你把c++自带的<stack>封装了⋯⋯保证无错,但是老师那里能否通过嘛⋯⋯说不定老师会夸奖你呢!嘿嘿


如何用c语言编写一个能够正确运行的程序?
--- 最后,对于C语言指针这个对初学者很难懂的内容,建议翻阅 “征服C指针”一书。大概看懂3,4章,你对C语言就算真正入门了。By the way,初学者在代码里,如果有重复对一个数组赋值使用的情况,建议不管三七二十一使用 memset() 过度使用也没有关系(对初学者而言),好的习惯可以让学习之路更顺...

如何用c语言编写一个程序?
include<stdio.h> int main(){ int i,m=0;for(i=2;i<=100;i+=2) m=m+i;printf("%d\\n",m);return 0;} 或 include int main(){ int i,sum=0;for(i=1;i<=50;i++){ sum=sum+2*i;} printf("2+4+6+…+98+100=%d\\n",sum);return 0;} ...

谁能用c语言中的for语句,编写个从1加到100的程序
当然可以!以下是用C语言编写从1加到100的程序的示例代码:Copy code include <stdio.h> int main() { int sum = 0;for (int i = 1; i <= 100; i++) { \/\/ 从1加到100 sum += i;} printf("1到100的和为:%d\\n", sum);return 0;} 在程序中,我们使用了 for ...

怎样用C语言编写一个简单的程序?
下面是一个简单的例子,它展示了如何手动输入 7 个元素,然后求这 7 个元素的和,并输出最大值和最小值。include <stdio.h> int main(){ int a[7]; \/\/ 建立一个 7 元素的数组 int i;int sum = 0;int max = a[0];int min = a[0];\/\/ 手动输入 7 个元素 for (i = 0; i ...

c语言编写程序,定义一个3行4列的二维整型数组
include <stdio.h>int main(){ int a[3][4]; int l[3]={0},c[4]={0},s=0; int i,j; for(i = 0; i < 3;i++) { for(j = 0; j < 4; j ++) { scanf("%d",&a[i][j]); s+=a[i][j]; l[i]+=a[i][j]; c[j]+=a...

怎样用C语言编一个两数相加的程序?
您可以使用C语言中的加法运算符(+)来编写一个两数相加的程序。以下是一个简单的示例程序:在上面的程序中,我们首先定义了三个变量:num1、num2和sum。num1和num2用于存储用户输入的两个数字,而sum用于存储这两个数字的和。接下来,我们使用printf函数提示用户输入两个数字,并使用scanf函数将用户...

用C语言编写一个简单程序,有哪些步骤,可以举一个例子详细讲解下吗?_百 ...
\/\/以Helloworld示例 \/\/先使用编辑工具如windows的记事本或vc++环境,或linux的vim编辑器创建一个hello.c文件 \/\/打开文件后,如下 步骤写程序 include <stdio.h>\/\/首先要引入c语言的标准输入输出库文件,因为这个文件里有已经定义好的可以使用的函数 \/\/接下来需要写一个main函数,这也是c语言程序里必...

C语言编写一个软件?
1、首先打开pelles C,创建一个新的项目文件。2、然后输入简单的框架。3、接着用switch函数完成加减乘除操作。4、检查输入之后就可以计算结果了。这里需要添加的代码如下,之后便可以运行了。5、这里我们输入一个例子。

用C语言编写程序:输入一个人的名字、年龄、工资并在最后输出来。_百度...
struct imfomation{ char name[20];int age;int salary;};include "stdio.h"void main(){ struct imfomation a;\/\/a为结构体变量 printf("请输入姓名:\\n");gets(a.name);printf("请输入年龄:\\n");scanf("%d",&a.age);printf("请输入工资:\\n");scanf("%d",&a.salary);printf("...

C语言 编写一个函数,由实参传来一个字符串,统计字符串中字母,数字,空 ...
include <stdio.h> include <string.h> int letter,number,blank,other;void count(char str[]){ int i;for(i=0;str[i]!='\\0';i++){ if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))letter++;else if(str[i]>='0'&&str[i]<='9')number++;else...

临夏县17329344878: 用C++语言编写一个栈的类模板希望能够把要求的都实现出来谢谢.分值不多麻烦了. -
广章解郁: //该程序简单并可正确运行,希望kutpbpb的回答能对你有所帮助! #include

临夏县17329344878: 用C++语言写一个实现栈功能的模板类 包括pop push 功能 -
广章解郁: #include <iostream.h>#include <stdlib.h>/////////////////////////////////////////////////////////////////////////////////////#define MAXSIZE 0xFFFFtemplate<class type>class SeqStack{int top; //栈顶指示type *stacka; //数组名int maxsize; //栈最大可容纳元素个数public:...

临夏县17329344878: c++栈 编写一个类实现简单的栈
广章解郁: #include&lt;iostream&gt; using namespace std; class Stack { public: Stack() { top=-1; } bool push(int n)//压栈 { if(!isfull()) data[++top]=n; else return false; return true; } bool pop()//退栈 { if(!isempty()) top--; else return false; return true; } int gettop(...

临夏县17329344878: C++实现:2.用类模板设计一个栈类stack,其中有两个私有数据成员s数组(存放栈元素)和int top(用于表示栈 -
广章解郁: //stack.h template class Stack { private: enum {NUM=10}; type * s; int stacksize; int top; public: Stack(int ss=NUM); ~Stack(){delete[] s;} Stack(const Stack& st); Stack& operator=(const Stack& st); bool isempty(){return top==0;} bool isfull(){return top=...

临夏县17329344878: 用C++语言编写程序:根据栈的功能,自己实现一个模板类.基本需要完成的功能如下: -
广章解郁: #includeusing namespace std;const int Max=100;templateclass MyStack{ private: T *aa; unsigned int p; public : void init(); bool isEmpty(); T pop(); void push(const T a); unsigned int size(); void destroy(); };templatevoid MyStack::init(){ aa = new T[...

临夏县17329344878: 求帮忙写个队列类模版和栈类模版,用C++,越简单越好 -
广章解郁: 最简单的方法就是用数组来实现了,以前写过,看看是否合适,不合适可以改 template <class T> //数组队列 class Queue { public: Queue() : elem_count(0), r_offset(0), w_offset(0){} T& front() { return arr[r_offset]; } const T& front() const { return arr[r_...

临夏县17329344878: C++栈类的实现 -
广章解郁: 栈的操作3个push, pop, top 模板类,就不写全了 T array[] = new T[n]; top(){ return array[n-1]; } pop(){ n-1; } push(int k){ array[n] = k; n++; }

临夏县17329344878: 建立一个堆栈类模板 C++ -
广章解郁: 写完再来贴 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 我觉得链栈没必要初始化,构造函数已经够了,更不必判栈满,所以就没写. 若非要的话,发信给我,再帮你写一个初始化函数 template<class T> class Stack...

临夏县17329344878: C++: 编写一个顺序栈,要有顺序栈的类型判空操作,清空操作与求栈长操作,入栈操作,出栈操作.和 -
广章解郁: #include #include using namespace std; template //模板类 class Node{ //链表的节点 public: T Elem; Node *pre,*next; }; template //模板类 class MyStack{ private: Node *Top,*Base; //只需记录栈顶和栈底 public: MyStack(){ //构造函数 Top=new ...

临夏县17329344878: 用C++建立一个顺序栈并且包括(进栈,退栈和读栈顶),急用 -
广章解郁: //================================LStack.h======================================//模板栈类接口的定义//Stack: 类的构造函数//~Stack: 类的析构函数//empty: 判空函数//push: 压栈函数//top: 取栈顶元素//pop: 将栈顶元素...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网