| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 900 人关注过本帖
标题:我想用 连表 来存储(动态) 所有学生的信息《》
只看楼主 加入收藏
beyond0702
Rank: 1
来 自: 桂 林
等 级:新手上路
帖 子:219
专家分:0
注 册:2007-11-17
收藏
 问题点数:0 回复次数:5 
我想用 连表 来存储(动态) 所有学生的信息《》
我想用 连表 来存储(动态) 所有学生的信息
把它定义成 静态成员,怎么初始 化呢?

或是有其他方法可以代替。。

typdef struct snode
{
  long number;
  sting name;
  double Engscore;
  double Mathscore;

}Slink;

class TStuden
{
  private:
       static: Slink *head ;   //怎么初始化这里的静态成员呢???.
 public:
     //**********

};
搜索更多相关主题的帖子: 动态 学生 double Slink name 
2008-06-13 19:56
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
初始化静态结构成员还有再定义一下吧.比如你这个例子:
这样初始化就可以的:Slink* Tstuden::head = .....

你的typedef string 都拼写错误,呵呵..

i like linux...
2008-06-14 00:18
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
忘了说,要在类外初始化.

i like linux...
2008-06-14 00:19
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
你可以选择用STL....下面是我写的一个双链表,功能不多....
[size=1.5]/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#ifndef DATASTRUCT_H_
#define DATASTRUCT_H_
#include<cassert>
#include<iostream>

template<typename _Ty>
struct node
{
public:
        _Ty value_;
        node* next_,*pre_;
        node(const _Ty& value): value_(value)
        {
            
pre_ = next_ =0;
        }
        
~node(){ std::cout<<"destory..."<<std::endl;}
}
;
template<typename _Ty,class _Node=node<_Ty> >
class DList
{

   
typedef  _Node*  pointer;
    typedef  _Node const*  const_pointer;
    typedef  _Node&  reference;
    typedef  _Node&  const_reference;
public:
    DList();
    DList(const DList<_Ty,_Node>& source);
    DList<_Ty,_Node>& operator=(const DList<_Ty,_Node>& source);
    ~DList();

    bool empty() const { return (head_==0); }
   
int size() const { return size_; }
   
pointer begin() const { return head_; }
   
pointer end() const { return 0; }
   
void push_front(const _Ty& value);
    void push_back(const _Ty& value);
    _Ty front() const;
    _Ty back() const;
    void pop_front();
    void pop_back();
    void Insert(const _Ty& value,pointer where_);
    void Delete(pointer where_);
    pointer Find(int pos) const;
    void reverse() ;

    void print() const
   
{
        
for(pointer it=head_;it!=0;it=it->next_ )
            std::cout<<it->value_<<" ";
        std::cout<<std::endl;
    }
private:
    pointer allocated() const
   
{
        
return static_cast<pointer>(::operator new(sizeof(_Node)));
    }
   
void append(pointer where_,const _Ty& value) const
   
{
        
new (where_)_Node(value);
    }
   
void destroy(pointer where_) const
   
{
        
where_->~_Node();
        ::operator delete(where_);
    }
   
pointer link(pointer where_pre,pointer where_,pointer where_suc)
    {
        
where_->pre_ = where_pre;
        where_->next_ = where_suc;
        if( where_pre )  where_pre->next_ = where_;
        if( where_suc )  where_suc->pre_ = where_;
        return where_;
    }
   
void Swap(DList<_Ty,_Node>& source)
    {
        
std::swap(head_,source.head_);
        std::swap(size_,source.size_);
    }
private:
    pointer  head_;
    int size_;
};
//  具体实现
template<typename _Ty,class _Node >
DList<_Ty,_Node>::DList():head_(0),size_(0)
{}
template<typename _Ty,class _Node >
DList<_Ty,_Node>::~DList()
{
   
for(pointer begin_=head_,current;begin_!=end();)
    {
        
current=begin_;
        begin_=begin_->next_;
        destroy(current);
    }
   
std::cout<<"this is ....."<<std::endl;
}
template<typename _Ty,class _Node >
DList<_Ty,_Node>::DList(const DList<_Ty,_Node>& source):head_(0),size_(0)
{
   
typename DList<_Ty,_Node>::pointer begin_=source.begin();
    DList<_Ty,_Node> temp;
    for(;begin_!=source.end();begin_=begin_->next_)
    {
        
temp.push_back(begin_->value_);
    }
   
Swap(temp);
}
template<typename _Ty,class _Node>
DList<_Ty,_Node>& DList<_Ty,_Node>::operator= (const DList<_Ty,_Node>& source)
{
   
DList<_Ty,_Node> temp(source);
    Swap(temp);
    return *this;
}
template<typename _Ty,class _Node >
void DList<_Ty,_Node>::push_front(const _Ty& value)
{
   
typename DList<_Ty,_Node>::pointer node_=allocated();
    append(node_,value);
    head_=link(0,node_,head_);
    ++size_;
}
template<typename _Ty,class _Node >
void DList<_Ty,_Node>::push_back(const _Ty& value)
{
   
typename DList<_Ty,_Node>::pointer node_=allocated();
    append(node_,value);
    typename DList<_Ty,_Node>::pointer end_=Find(size_);
    if( head_==0 ) head_=node_;
    else link(end_->pre_,end_,node_);
    ++size_;
}
template<typename _Ty,class _Node>
inline _Ty DList<_Ty,_Node>::front() const
{
   
return head_->value_;
}
template<typename _Ty,class _Node>
inline _Ty DList<_Ty,_Node>::back() const
{
   
typename DList<_Ty,_Node>::pointer node_=Find(size_);
    return node_->value_;
}
template<typename _Ty,class _Node>
void DList<_Ty,_Node>::pop_back()
{
   
typename DList<_Ty,_Node>::pointer node_p=Find(size_-1);
    typename DList<_Ty,_Node>::pointer node_s=Find(size_);
    link(node_p->pre_,node_p,0);
    destroy(node_s);
    head_=--size_?head_:0;
}
template<typename _Ty,class _Node>
void DList<_Ty,_Node>::pop_front()
{
   
typename DList<_Ty,_Node>::pointer node_=head_;
    head_=link(0,head_->next_,head_->next_->next_);
    destroy(node_);
    head_=--size_?head_:0;
}
template<typename _Ty,class _Node>
void DList<_Ty,_Node>::Insert(const _Ty& value,typename DList<_Ty,_Node>::pointer where_)
{
   
typename DList<_Ty,_Node>::pointer node_=allocated();
    append(node_,value);
    if( where_==head_ ) head_=link(where_->pre_,node_,where_);
    else link(where_->pre_,node_,where_);
    ++size_;
}
template<typename _Ty,class _Node>
void DList<_Ty,_Node>::Delete(typename DList<_Ty,_Node>::pointer where_)
{
   
if( where_==head_ ) head_=link(0,head_->next_,head_->next_->next_);
    else link(where_->pre_->pre_,where_->pre_,where_->next_);
    destroy(where_);
    --size_;
}
template<typename _Ty,class _Node>
typename DList<_Ty,_Node>::pointer DList<_Ty,_Node>::Find(int pos) const
{
   
assert(pos>=0&&pos<=size_);
    typename DList<_Ty,_Node>::pointer node_=head_;
    for(;pos>1;--pos) node_=node_->next_;
    return node_;
}
template<typename _Ty,class _Node>
void DList<_Ty,_Node>::reverse()
{
   
typename DList<_Ty,_Node>::pointer end_=Find(size_);
    for(typename DList<_Ty,_Node>::pointer x_pre=0,x=end_;end_!=0;)
    {
        
end_=end_->pre_;
        x_pre=link(x_pre,x,0);
        x=end_;
        if(x_pre->pre_==0) head_=x_pre;
    }
}
   
#endif[/size]

樱花大战,  有爱.
2008-06-14 00:47
beyond0702
Rank: 1
来 自: 桂 林
等 级:新手上路
帖 子:219
专家分:0
注 册:2007-11-17
收藏
得分:0 
谢谢各位!我已经搞出来了;不过我想性能不太好;
  stl ,我还没怎么用过
我想问的是以后真正搞项目的时候,是不是都用 stl ,或是大部分用它,这样自己可以少写很多的代码,不自己定义那么多数据结构。但同时我想用它所引来的开销问题。。。。是不是真的能节省呢?

蝴 蝶 颤 动 了 翅 膀 !!!
2008-06-16 02:29
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
STL效率不见得高,但是却是很健壮的,异常安全性很好....另外,在真正搞项目时直接用STL可以缩短时间(我这么人为)..你可以从STL派生出你需要的数据结构....

樱花大战,  有爱.
2008-06-16 13:13
快速回复:我想用 连表 来存储(动态) 所有学生的信息《》
数据加载中...
 
   



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

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