| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 385 人关注过本帖, 1 人收藏
标题:这是一个利用类的继承和实现压栈及出栈,在VC 6中能过编译无语法错误,但不 ...
只看楼主 加入收藏
fenjin1680
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-7-2
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:5 
这是一个利用类的继承和实现压栈及出栈,在VC 6中能过编译无语法错误,但不能显示栈链及出栈,这是很典型错误,请大家一起讨论
程序代码:
/* ***********
node.h
*************/


#include <iostream>
using namespace std;
class node
{
    friend class linklist;
    friend class stack;
public:
    node();
    node(node &n);
    node(int i,char c='0');
    node(int i,char c,node *p,node *n);
    ~node();
private:
    int idata;

    char cdata;

    node *prior;

    node *next;

};
node::node()
{
    cout <<"Node constructor is running..." <<endl;

    idata=0;
    cdata='0';
    prior=NULL;

    next=NULL;

}
node::node(int i,char c)
{
    cout <<"Node constructor is running..." <<endl;
    idata=i;
    cdata=c;
    prior=NULL;
    next=NULL;
}
node::node(int i,char c,node *p,node *n)
{
    cout <<"Node constructor is running..." <<endl;
    idata=i;
    cdata=c;
    prior=p;
    next=n;
}
node::node(node &n)
{
    idata=n.idata;
    cdata=n.cdata;
    prior=n.prior;
    next=n.next;
}
node::~node()
{
    cout <<"Node destructor is running..." <<endl;
}
程序代码:
/***************
linklist.h
****************/
#include "node.h"
#include <iostream>
using namespace std;
class linklist
{
public:
    linklist(int i=0,char c='0');
    linklist(linklist &l);
    ~linklist();
    bool locate(int i);
    bool locate(char c);
    bool insert(int i=0,char c='0');
    bool Delete();
    void show();
    void destroy();
protected:
    node head;
    node * pcurrent;
};
linklist::linklist(int i,char c):head(i,c)
{
    cout<<"Linklist constructor is running..."<<endl;
    pcurrent=&head;
}
linklist::linklist(linklist &l):head(l.head)
{
    cout<<"Linklist Deep cloner running..." <<endl;
    pcurrent=&head;
    node * ptemp1=l.head.next;
    while(ptemp1!=NULL)
    {
        node * ptemp2=new node(ptemp1->idata,ptemp1->cdata,pcurrent,NULL);
        pcurrent->next=ptemp2;
        pcurrent=pcurrent->next;
        ptemp1=ptemp1->next;
    }
}
linklist::~linklist()
{
    cout<<"Linklist destructor is running..."<<endl;
    destroy();
}
bool linklist::locate(int i)
{
    node * ptemp=&head;
    while(ptemp!=NULL)
    {
        if(ptemp->idata==i)
        {
            pcurrent=ptemp;
            return true;
        }
        ptemp=ptemp->next;
    }
    return false;
}
bool linklist::locate(char c)
{
    node * ptemp=&head;
    while(ptemp!=NULL)
    {
        if(ptemp->cdata==c)
        {
            pcurrent=ptemp;
            return true;
        }
        ptemp=ptemp->next;
    }
    return false;
}
bool linklist::insert(int i,char c)
{
    if(pcurrent!=NULL)
    {
        node * temp=new node(i,c,pcurrent,pcurrent->next);
        if (pcurrent->next!=NULL)
        {
            pcurrent->next->prior=temp;
        }
        pcurrent->next=temp;
        return true;
    }
    else
    {
        return false;
    }
}
bool linklist::Delete()
{
    if(pcurrent!=NULL && pcurrent!=&head)
    {
        node * temp=pcurrent;
        if (temp->next!=NULL)
        {
            temp->next->prior=pcurrent->prior;
        }
        temp->prior->next=pcurrent->next;
        pcurrent=temp->prior;
        delete temp;
        return true;
    }
    else
    {
        return false;
    }
}
void linklist::show()
{
    node * ptemp=&head;
    while (ptemp!=NULL)
    {
        cout <<ptemp->idata <<'\t' <<ptemp->cdata <<endl;
        ptemp=ptemp->next;
    }
}
void linklist::destroy()
{
    node * ptemp1=head.next;
    while (ptemp1!=NULL)
    {
        node * ptemp2=ptemp1->next;
        delete ptemp1;
        ptemp1=ptemp2;
    }
    head.next=NULL;
}
程序代码:
/***************
stack.h
****************/

#include "linklist.h"
class stack:private linklist
{
public:
    bool push(int i,char c);//
    bool pop(int &i,char &c); //
    void show();
};
bool stack::push(int i,char c)
{
    while(pcurrent->next != NULL)
        pcurrent = pcurrent->next;
    return insert(i,c);  //
}
bool stack::pop(int &i,char &c) //
{
    while (pcurrent->next != NULL)
        pcurrent = pcurrent ->next;
    i = pcurrent->idata; //
    c = pcurrent->cdata; //
    return Delete();  //
}
void stack::show()
{
    show();
}




程序代码:
/*****************
main.cppp
******************/


#include <iostream>
#include "stack.h"
int main()
{
    stack ss;
    int i,j;
    char c;
    for (j=0;j<3;j++)
    {
        cout <<"请输入一个数字和一个字母:" <<endl;
        cin >>i >>c;
        if (ss.push(i,c))
        {
            cout <<"压栈成功!" <<endl;
        }
    } //为何程序在这里 就结束了,不往下执行了!是那出错了!!请大家一起来讨论!!!
    ss.show();  
    while (ss.pop(i,c))
    {
        cout <<"退栈数据为i=" <<i <<" c=" <<c <<endl;
    }
    return 0;       

}



[ 本帖最后由 fenjin1680 于 2013-7-5 07:55 编辑 ]
2013-07-04 22:50
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:10 
你试试用vs来调试看看

思考赐予新生,时间在于定义
2013-07-05 01:30
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:10 
嗯,大家一起讨论
你的观点是什么?你先说,我再补充...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-07-05 08:15
fenjin1680
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-7-2
收藏
得分:0 
这个代码,内在的逻辑的没有任何问题的,只是入门级别的代码,看了“love云彩”的建议后,专程载了个VS 2010来测试,新版的平台确实也可以测出 “如递归所有控件路径,函数将导致运行时堆栈溢出”,在最新版的code:blocks中也可以过编译无语法错误提示,在编译成功后,程序的运行测试中会带回一个溢出的值回来,有了这些的提示信息,估计很快的大家就能明白,上面的这些代码是那里出错了!这是非常典型的继承函数的错误,有一定的隐避性!

追求极致!
2013-07-05 10:20
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
原来是来做科普的,我还以为是来问问题的

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-07-05 11:04
fenjin1680
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-7-2
收藏
得分:0 
不是的,是来向你学习来的,请版主,把上边的问题(特别是上边所犯的错误给)给展开一下可以吗!最好能把私有继承的函数调用机理及相应的技巧和大家分亨一下,我是真心来学习!

追求极致!
2013-07-05 12:41
快速回复:这是一个利用类的继承和实现压栈及出栈,在VC 6中能过编译无语法错误, ...
数据加载中...
 
   



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

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