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

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

k哥



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

5come5帮你背单词 [ endorse /in'do:s/ vt. 背书;答署(姓名),赞同;批准 ]


【已解决】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帮你背单词 [ off /o:f/ ad. & a. 脱离(的),离去,(断)掉(的),停止(的),关着(的);prep. 从…离开 ]


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



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

5come5帮你背单词 [ network /'netwə:k/ n. 网状织物,网状系统,广播(电视)网 ]


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



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

5come5帮你背单词 [ address /ə'dres/ n. 地址,住址;讲话,演说;向…讲话;写姓名地址 ]


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



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

5come5帮你背单词 [ wall /wo:l/ n. 墙,围墙 ]


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



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

5come5帮你背单词 [ quality /'kwoliti/ 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帮你背单词 [ anywhere /'eniw/ə/ ad. 无论哪里,随便哪里,任何地方,什么地方(用于否定、疑问、条件句中 ]


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帮你背单词 [ disgrace /dis'greis/ n. 失宠,丢脸,丢脸的人(事);vt. 使丢脸 ]


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帮你背单词 [ cheese /ti:z/ n. 干酷,奶酷 ]


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



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

5come5帮你背单词 [ water /'wo:tə/ n. 水;vt. 给…浇水 ]


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

#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帮你背单词 [ promote /prə'məut/ vt. 提升,提拔,发起,举办,宣传,推广,促成,帮助实现 ]


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



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

5come5帮你背单词 [ exposure /iks'pəu3ə/ n. 暴露,面临,揭露,揭发,曝光 ]


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

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