唐山网站建设

设为主页 加入收藏 繁體中文

链表的顺序表示和实现(C++模板类实现)

核心提示:链表的顺序表示和实现(C++模板类实现)

/*List.h*/
#ifndef _LIST_H
#define _LIST_H
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
template
class List
{
public:
 List();     //构造函数:构造1个空的线性表
 //~List(); //析构函数
 void DestroyList();  //烧毁线性表
 void ClearList();    //将表重置为空表
 bool ListEmpty();    //若为空表存在返回True
 int ListLength();   //返回表中数据元素个数
 T GetElem(int i,T &e);     //用e返回表中第i个元素的值
 int LocateElem(T e);  //返回表中第1个e元素的位置
    T PriorElem(T cur_e,T &pre_e);        //返回先驱
 T NextElem(T cur_e,T &next_e);        //返回后继
 void ListInsert(int i,T e);      //在第i个元素插进值e
 T ListDelete(int i,T &e);        //删除第i个元素的值并返回
 void ListTraverse(void visit());  //对每个元素进行visit()

private:
 T *elem;
 int length;
 int listsize;
};

//构造1个空的线性表
template
List::List()  
{
 elem=(T *)malloc(LIST_INIT_SIZE*sizeof(T));  /*分配空间*/
 if(!elem)  
  throw   "Allocation   failed";
 else
 {
  length=0;
     listsize=LIST_INIT_SIZE;
 }
}
//烧毁线性表
template
void List::DestroyList()      
{
 free(elem);
}
//将表重置为空表
template
void List::ClearList()       
{
 length=0;
}
 //若为空表存在返回True
template
bool List::ListEmpty()     
{
 return length ? true :false;
}
//返回表中数据元素个数
template
int List::ListLength()       
{
 return length;
}
//用e返回表中第i个元素的值
template
T List::GetElem(int i,T &e)         
{
 if(i<1||i>length)
  throw "Index out of bounds";
 else
     e=elem[i⑴];
 return e;
}
 //返回表中第1个e元素的位置
template                         
int List:: LocateElem(T e)
{
 for(int i=0;i {
 if(elem[i]==e)
  return i+1;
 }
 cout<<"表中不存在值为"< return 0;
 
 
}
//返回先驱
template
T List::PriorElem(T cur_e,T &pre_e)       
{
 int i=LocateElem(cur_e);
 if(i>1)
 {
 pre_e=elem[i⑵];
 return pre_e;
 }
 else
  return NULL;
}
//返回后继
template
T List::NextElem(T cur_e,T &next_e)       
{
 int i=LocateElem(cur_e);
 if(i>0&&i {
 next_e=elem[i];
 return next_e;
 }
 else
  return NULL;
}
//在第i个元素插进值e
template
void List::ListInsert(int i,T e)
{
 if(i<0||i>length+1) cout<<"error!";
 else if(i==length)
 {
  elem = (T *)realloc(elem,(length+LISTINCREMENT)*sizeof(T));
 }
 for(int j=length;j>=i;j--) elem[length]=elem[length⑴];
 elem[i⑴]=e;
 length++;
}
//删除第i个元素的值并返回
template
T List::ListDelete(int i,T &e)
{
 if(length==0) return NULL;
 if(i<0||i>length) return NULL;
 e=elem[i⑴];
 for(int j=i;j length--;
 return e;
}
//对每个元素进行visit()
template
void List::ListTraverse(void visit())
{
 for(i=0;i}

#endif

 

//程序测试文件,http://blog.ourys.com/原创,做人好厚道,转载请表明出往

#include
#include "List.h"
using namespace std;
int main()
{

 List list;
 for(int i=0;i<10;i++) list.ListInsert(i+1,i*(1+i));
 int a[10],b[10];
 for(int i=0;i

 cout< cout< list.NextElem(0,b[0]);
 cout< cout< for(int i=0;i

 
     return 0;
}

唐山网站建设www.fw8.net
TAG:函数,位置,元素,个数,先驱
评论加载中...
内容:
评论者: 验证码: