| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:【求助】单链表的小小问题
只看楼主 加入收藏
coolman366
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2009-11-14
结帖率:100%
收藏
 问题点数:0 回复次数:2 
【求助】单链表的小小问题
//已经修改过了,运行之后老打印不出值来
//那个大牛指教下啊,不胜感激
//node.h
#ifndef NOKE_h
#define NOKE_h

template <class T>

class node
{
    public:
        T data;

        node<T> *nextptr;
        node():data(0),nextptr(0){};
        node(const T &info):data(info),nextptr(0){}
        /*node(const T &info, node<T> *nextvalue=0){
            data=info;
            nextptr=nextvalue;
        }
        node( node<T>* nextvalue)
        {
            nextptr=nextvalue;
        }*/
};
#endif

//nnklist.h
#ifndef NKLIST_H
#define NKLIST_H
#include "noke.h"
#include <iostream>
using namespace std;

template <class T>

class nklist :public node<T>
{
    public:
        nklist();//构造函数
        bool isempty();//判断是否为空

        void addlist(const T&);
        void insert(const int,const T&);
        void search(const T&);
        void del(const int);
        const T getvalue(const int);
        node<T> *getptr(const int);//get upon node pointer

    private:
        node<T> *getnewnode(const T &);
        node<T> *headptr;
        node<T> *lastptr;
};

template <class T>
nklist<T>::nklist()//构造函数
{
    headptr=new node<T>;
    lastptr=headptr;
}
template <class T>
bool nklist<T>::isempty()
{
    return headptr==lastptr;
}
template <class T>
void nklist<T>::addlist(const T &value)//后续添加节点
{   
    node<T>* ptr=getnewnode(value);
    if(isempty()){

        headptr->nextptr=ptr;
        lastptr=ptr;

    }
    else{
        lastptr->nextptr=ptr;

        lastptr=ptr;
    }
}
template <class T>
void nklist<T>::insert(const int p,const T &value)//插入节点
{
       node<T>* ptr=getnewnode(value);
    if(p==0)
   {
     ptr->nextptr=headptr->nextptr;
     headptr->nextptr=ptr;
    }
   else
    {
        node<T>* q=getptr(p-1);
        if(q==lastptr){
            ptr=lastptr->nextptr;
            lastptr=ptr;
        }
        else{
        ptr->nextptr=q->nextptr;
        q->nextptr=ptr;
        }
    }

}

template <class T>
void nklist<T>::search(const T &value)//查找值为value的节点
{
  node<T>* p=headptr;
  int count=1;
  while(p!=lastptr)
  {
      if(p->data==value){
          cout<<"value is found in "<<count<<"node"<<endl;
          p=p->nextptr;
      }
      else
          cout<<"value "<<value<<"is not found"<<endl;
  }
}
template <class T>
void nklist<T>::del(const int p)//删除节点
{
    node<T>* q=getptr(p-1);
    if(q->nextptr==lastptr){   
       q->nextptr=0;
       lastptr=q;
   }
   else{
       q->nextptr=ptr->nextptr;
       ptr->nextptr=0;

   }
    delete ptr;
}
      
template <class T>
const T nklist<T>::getvalue(const int p)
{
    node<T>* q=getptr(p-1);   
    return q->data;
}
template <class T>
node<T> *nklist<T>::getptr(const int p)//取得第P个节点的指针
{
        int count=0;
          if(p==0)
           return headptr;
       node<T> *ptr=headptr;
       while(count<p&&ptr!=lastptr){
        ptr=ptr->nextptr;
        count++;
       }
        if(count==p)
         return ptr;
        else
            cout<<"指针越界"<<endl;
     
   
}

template <class T>
node<T> *nklist<T>::getnewnode(const T &value)//取得新的节点
{
    node<T>* ptr=new node<T> (value);

    return ptr;
}
#endif

//test.cpp
#include "nklist.h"
#include <iostream>
using namespace std;

int main()
{
    nklist<int> nk;
   
    int num=2;
    for(int i=1;i<10;i++){
    nk.addlist(num);
    num+=2;
    }
    for(i=1;i<10;i++)
    nk.getvalue(i);

   return 0;
}

[ 本帖最后由 coolman366 于 2009-11-17 21:31 编辑 ]
搜索更多相关主题的帖子: 单链 
2009-11-17 09:33
coolman366
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2009-11-14
收藏
得分:0 
忘了输出了
2009-11-17 21:55
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:0 
回复 2楼 coolman366
早说么,我就不看了

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-11-17 21:57
快速回复:【求助】单链表的小小问题
数据加载中...
 
   



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

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