我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 【已解决】C++中如何定义一个链表 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

k哥



性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
家族: 物电学子快快快
发贴: 1109
威望: 0
浮云: 1109
在线等级:
注册时间: 2007-09-07
最后登陆: 2010-09-21

5come5帮你背单词 [ same /seim/ a. 相同的,一样的;pron. 同样的人或事 ]


【已解决】C++中如何定义一个链表

不用struct实现
用class把链表的数据操作和数据封装成一个类。
主要问题是:怎样定义一个指向下一个结点的指针。。


[ 此帖被k哥在2007-11-17 15:40重新编辑 ]
顶端 Posted: 2007-11-13 13:37 | [楼 主]
ss11



性别: 保密 状态: 该用户目前不在线
等级: 初出茅庐
发贴: 87
威望: 0
浮云: 1106
在线等级:
注册时间: 2005-11-19
最后登陆: 2008-03-08

5come5帮你背单词 [ conform /kən'fo:m/ vi. 依照,遵守,符合,vt. 使一对敌,使符合,使遵守 ]


定义一个节点类,定义一个链表类
把链表类弄成节点类的友元
顶端 Posted: 2007-11-13 13:45 | [1 楼]
k哥



性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
家族: 物电学子快快快
发贴: 1109
威望: 0
浮云: 1109
在线等级:
注册时间: 2007-09-07
最后登陆: 2010-09-21

5come5帮你背单词 [ mexico /'meksikəu/ n. 墨西哥 ]


链表类怎么写?
顶端 Posted: 2007-11-13 13:51 | [2 楼]
luwen



性别: 帅哥 状态: 该用户目前不在线
头衔: 无我相
等级: 人见人爱
发贴: 4372
威望: 0
浮云: 1120
在线等级:
注册时间: 2006-09-14
最后登陆: 2013-09-25

5come5帮你背单词 [ independence /indi'pendəns/ n. 独立,自主,自立 ]


蝈蝈还是看下数据结构的书吧
顶端 Posted: 2007-11-13 13:57 | [3 楼]
k哥



性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
家族: 物电学子快快快
发贴: 1109
威望: 0
浮云: 1109
在线等级:
注册时间: 2007-09-07
最后登陆: 2010-09-21

5come5帮你背单词 [ merry /'meri/ a. 愉快的,欢乐的 ]


身边没有,不想故意跑去图书馆。。
 
顶端 Posted: 2007-11-13 13:59 | [4 楼]
zhd32



性别: 帅哥 状态: 该用户目前不在线
等级: 版主
家族: YD一族
发贴: 619
威望: 0
浮云: 543
在线等级:
注册时间: 2006-04-22
最后登陆: 2009-06-22

5come5帮你背单词 [ dollar /'dolə/ n. 美元,元 ]


Copy code
struct _Node {
    int data;
    struct Node *next;
};

typedef struct _Node Node;
顶端 Posted: 2007-11-13 18:37 | [5 楼]
k哥



性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
家族: 物电学子快快快
发贴: 1109
威望: 0
浮云: 1109
在线等级:
注册时间: 2007-09-07
最后登陆: 2010-09-21

5come5帮你背单词 [ canada /'kænədə/ n. 加拿大 ]


Quote:
引用第5楼zhd32于2007-11-13 18:37发表的  :
[code]
struct _Node {
    int data;
    struct Node *next;
};
.......

不能用class定义一个链表吗?
顶端 Posted: 2007-11-13 19:22 | [6 楼]
木村心野



贝尔诺勋章 灌水天才奖
性别: 帅哥 状态: 该用户目前不在线
头衔: 生命不在于活得长与短,而在于 ..
等级: 荣誉会员
家族: 丢丢
发贴: 42396
威望: 4
浮云: 430
在线等级:
注册时间: 2005-10-17
最后登陆: 2010-11-28

5come5帮你背单词 [ stewardess /'stju:ədis/ n. 女乘务员 ]


Quote:
引用第6楼k哥于2007-11-13 19:22发表的  :

不能用class定义一个链表吗?

一般链表是用C实现的
很少用C++实现
因为C++里有模板来实现这些东西
顶端 Posted: 2007-11-16 11:20 | [7 楼]
lkk



性别: 帅哥 状态: 该用户目前不在线
头衔: 做神一样的男人
等级: 人见人爱
发贴: 3954
威望: 0
浮云: 1248
在线等级:
注册时间: 2005-09-30
最后登陆: 2012-01-14

5come5帮你背单词 [ impatient /im'peiənt/ a. 不耐烦的,急躁的,急切的 ]


类里面定义一个对象指针
顶端 Posted: 2007-11-16 11:23 | [8 楼]
yunyue



性别: 帅哥 状态: 该用户目前不在线
等级: 版主
发贴: 979
威望: 5
浮云: 407
在线等级:
注册时间: 2006-06-18
最后登陆: 2012-06-08

5come5帮你背单词 [ bald /bo:ld/ a. 秃的,秃顶的,赤裸裸的,毫不掩饰的 ]


数据结构书上的,可以作为参考

#ifndef LIST_H
#define LIST_H 1

#include <iostream>
namespace yunyue{
    template <class T>
    struct LinkNode{
        T data;
        LinkNode<T> *link;
        LinkNode(LinkNode<T> *ptr = NULL){link = ptr;}
        LinkNode(const T& item, LinkNode<T> *ptr = NULL){
            data = item;
            link = ptr;
        }
    };
   
    template <class T>
    class List{
    protected:
        LinkNode<T> *first;
    public:
        List(){first = new LinkNode<T>;}
        List(const T& x){first = new LinkNode<T>(x);}
        List(List<T>&);
        ~List(){makeEmpty();}
        void makeEmpty();
        int length() const;
        LinkNode<T> *getHead() const{return first;}
        void setHead(LinkNode<T> *p){first = p;}
        LinkNode<T> *search(T);
        LinkNode<T> *locate(int);
        T *getData(int);
        void setData(int, T&);
        bool insert(int, T&);
        bool remove(int, T&);
        bool isEmpty() const{return first->link == NULL ? true : false;}
        bool isFull() const{return false;}
        void sort();
        void input();    //以inputRear(T)来实现
        void inputFront(T);
        void inputRear(T);
        void output();
        List<T>& operator=(List<T>&);
    };
   
    template <class T>
    inline
    List<T>::List(List<T>& L){
        T value;
        LinkNode<T> *srcptr = L.getHead();
        LinkNode<T> *destptr = first = new LinkNode<T>;
        while(srcptr->link != NULL){
            value = srcptr->link->data;
            destptr->link = new LinkNode<T>(value);
            destptr = destptr->link;
            srcptr = srcptr->link;
        }
        destptr->link = NULL;
    }
   
    template <class T>
    inline
    void List<T>::makeEmpty(){
        LinkNode<T> *q;
        while(first->link != NULL){
            q = first->link;
            first->link = q->link;
            delete q;
        }
    }
   
    template <class T>
    int List<T>::length() const{
        LinkNode<T> *p = first->link;
        int count = 0;
        while(p != NULL){
            p = p->link;
            ++count;
        }
        return count;
    }
   
    template <class T>
    LinkNode<T> *List<T>::search(T x){
        LinkNode<T> *current = first->link;
        while(current != NULL){
            if(current->data == x) break;
            else current = current->link;
        }
        return current;
    }
   
    template <class T>
    LinkNode<T> *List<T>::locate(int i){
        if(i < 0) return NULL;
        LinkNode<T> *current = first;
        int k = 0;
        while(current != NULL && k < i){
            current = current->link;
            ++k;
        }
        return current;
    }
   
    template <class T>
    T *List<T>::getData(int i){
        if(i <= 0) return NULL;
        LinkNode<T> *current = locate(i);
        if(current == NULL) return NULL;
        else return ¤t->data;
    }
   
    template <class T>
    void List<T>::setData(int i, T& x){
        if(i <= 0) return;
        LinkNode<T> *current = locate(i);
        if(current == NULL) return;
        else current->data = x;
    }
   
    template <class T>
    bool List<T>::insert(int i, T& x){
        LinkNode<T> *current = locate(i);
        if(current == NULL) return false;
        LinkNode<T> *newNode = new LinkNode<T>(x);
        if(newNode == NULL){
            std::cerr << "存储分配错误!" << std::endl;
            exit(1);
        }
        newNode->link = current->link;
        current->link = newNode;
        return true;
    }
   
    template <class T>
    bool List<T>::remove(int i, T& x){
        LinkNode<T> current = locate(i - 1);
        if(current == NULL || current->link == NULL) return false;
        LinkNode<T> *del = current->link;
        current->link = del->link;
        x = del->data;
        delete del;
        return true;
    }
   
    template <class T>
    void List<T>::input(){
        T endTag;
        std::cout << "先输入结束标志!endTag = ";
        std::cin >> endTag;
        inputRear(endTag);
    }
   
    template <class T>
    void List<T>::inputFront(T endTag){
        LinkNode<T> *newNode;
        T val;
        first = new LinkNode<T>;
        if(first == NULL){
            std::cerr << "存储分配错误!" << std::endl;
            exit(1);
        }
        std::cout << "请输入数据元素,输入" << endTag << "结束!" << std::endl;
        std::cin >> val;
        while(val != endTag){
            newNode = new LinkNode<T>(val);
            if(newNode == NULL){
                std::cerr << "存储分配错误!" << std::endl;
                exit(1);
            }
            newNode->link = first-link;
            first->link = newNode;
            std::cin >> val;
        }
    }
   
    template <class T>
    void List<T>::inputRear(T endTag){
        LinkNode<T> *newNode, *last;
        T val;
        first = new LinkNode<T>;
        if(first == NULL){
            std::cerr << "存储分配错误!" << std::endl;
            exit(1);
        }
        std::cout << "请输入数据元素,输入" << endTag << "结束!" << std::endl;
        std::cin >> val;
        last = first;
        while(val != endTag){
            newNode = new LinkNode<T>(val);
            if(newNode == NULL){
                std::cerr << "存储分配错误!" << std::endl;
                exit(1);
            }
            last->link = newNode;
            last = newNode;
            std::cin >> val;
        }
        last->link = NULL;
    }
   
    template <class T>
    void List<T>::output(){
        LinkNode<T> *current = first->link;
        while(current != NULL){
        std::cout << current->data << std::endl;
        current = current->link;
        }
    }
   
    template <class T>
    List<T>& List<T>::operator=(List<T>& L){
        T value;
        LinkNode<T> *srcptr = L.getHead();
        makeEmpty();
        LinkNode<T> *destptr = first = new LinkNode<T>;
        while(srcptr->link != NULL){
            value = srcptr->link->data;
            destptr->link = new LinkNode<T>(value);
            destptr = destptr->link;
            srcptr = srcptr->link;
        }
        destptr->link = NULL;
        return *this;
    }
   
}

#endif
顶端 Posted: 2007-11-16 14:27 | [9 楼]
木村心野



贝尔诺勋章 灌水天才奖
性别: 帅哥 状态: 该用户目前不在线
头衔: 生命不在于活得长与短,而在于 ..
等级: 荣誉会员
家族: 丢丢
发贴: 42396
威望: 4
浮云: 430
在线等级:
注册时间: 2005-10-17
最后登陆: 2010-11-28

5come5帮你背单词 [ pack /pæk/ n. 包,捆,包裹,一群,一组,一批;v. 包装,捆扎,塞满,挤满 ]


上面那个是用模板实现的
顶端 Posted: 2007-11-16 15:43 | [10 楼]
k哥



性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
家族: 物电学子快快快
发贴: 1109
威望: 0
浮云: 1109
在线等级:
注册时间: 2007-09-07
最后登陆: 2010-09-21

5come5帮你背单词 [ funeral /'fju:nərəl/ n. & a. 葬礼(的) ]


恩。。谢谢大家了
顶端 Posted: 2007-11-17 15:40 | [11 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.010897(s) query 5, Time now is:11-22 16:24, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号