求大神指导,这个线性表的问题

#include"C.h"

#ifdef _C_H_
#define _C_H_
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#inlcude <stack>
#include <queue>
#include <bitset>
#include <algorithm>
#include <ctime>
#include <cstdarg>
#include <assert.h>
using namespace std;
#endif

#include“Alist.h”

#ifndef _ALIST_H_
#define _ALIST_H_
template <typename T>class AList
{
public:
void ClearList();
bool ListEmpty () const;
int LocateElem(T e, bool (*eq) (T,T))const;
bool PriorElem (T e, bool (*eq) (T,T), T &next_e)const;
bool NextElem(T e, bool (*eq) (T,T), T &next_e)const;
bool ListDelete(int i,T &e);
void ListTraverse(void(*visit) (T*))const;
virtual bool GetElem(int i, T &e)const=0;
virtual bool ListInsert (int i,T &e)=0;
virtual int ListLength()const=0;
};
#endif

#include"SqList.h"

#ifndef _ALIST_H_
#define _ALIST_H_
template <typename T>class AList
{
public:
void ClearList();
bool ListEmpty () const;
int LocateElem(T e, bool (*eq) (T,T))const;
bool PriorElem (T e, bool (*eq) (T,T), T &next_e)const;
bool NextElem(T e, bool (*eq) (T,T), T &next_e)const;
bool ListDelete(int i,T &e);
void ListTraverse(void(*visit) (T*))const;
virtual bool GetElem(int i, T &e)const=0;
virtual bool ListInsert (int i,T &e)=0;
virtual int ListLength()const=0;
};
#endif
#ifdef _SQLIST_H_
#define _SQLIST_H_
template<typename T>class Sqlist:public AList<T>
{
friend void MergeList(const Sqlist<T>&, const SqList<T>&, SqList<T>&);
private:
T* elem;
int length;
int listsize;
public:
SqList(int k=1)
{
elem = new T[k];
assert (elem!= NULL);
length = 0;
listsize=k;
}


~SqList()
{
delete[]elem;
}
void ClearList()
{
length=0;
}
bool ListEmpty()const
{
return length=0;
}
int ListLength()const
{
return length;
}
bool GetElem(int i, T &e)const
{
if(i<1||i<length)
return false;
e=*(elem+i-1);
return true;
}
int LocateElem(T &e,bool (*eq) (T,T))const
{
int i =1;
while(i<=length && !eq(*(elem+i-1),e))
i++;
if(i<=length)
return i;
else
return 0;
}
bool PriorElem(T e, bool (*eq) (T,T),T &pre_e)const
{
int i= LocateElem(e,eq);
if(i<=1)
return false;
else
{
pre_e=*(elem+i-2);
return turn;
}
}
bool NextElem(T e, bool (*eq) (T,T), T &next_e)const
{
int i= LocateElem(e,eq);
if(i==0||i==length)
return false;
else
{
next_e=*(elem+i);
return ture;
}
}
bool ListInsert(int i, T e)
{
T *newbase, *q, *p;
if(i<1||i>length+1)
return false;
if(length==listsize)
{
newbase =new T(listsize*2);
assert(newbase!=NULL);
for(int j=0;j<length;j++)
*(newbase+j)=*(elem+j);
delete[]elem;
elem=newbase;
lisesize*=2;
}
q=elem+i-1;
for(p=elem+length-1;p>=q;--p)
*(p+1)=*p;
*q=e;
++length;
return true;
}
bool ListDelete(int i,T &e)
{
T *p,*q;
if(i<1||i>length)
return false;
p=elem+i-1;
e=*p;
q=elem+length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
length--;
return true;
}
void ListTraverse(void(*visit) (T*))const;
};
template<typename T>
void SqList<T>::ListTraverse(void(*visit)(T*))const
{
for(int i=0;i<length;i++)
visit(elem+i);
cout<<endl;
}
#endif


typedef int T;

#include"Func1-1.cpp"

bool equal(int cl,int c2)
{
  return c1==c2;
}
inline void print(T* c)
{
  cout<<*c<<" ";
}

void main()
{
bool i;
int j,k;
T e,e0;
SqList<T> L;
for(j=1;j<=5;j++)
L.ListInsert(1,j);
cout<<"在L的表头依次插入1~5后,L=";
L.ListTraverse(print);
cout<<"L是否空?"<<boolalpha<<L.ListEmpty()<<",表长="<<L.ListLength()<<endl;
L.GetElem(4,e);
cout<<"第4个元素的值为"<<e<<endl;
for(j=L.Listlength();j<=L.ListLength()+1;j++)
{
k=L.LocateElem(j,equal);
if(k)
cout<<"值为"<<j<<"的元素是表L的第"<<k<<"个元素,";
else
cout<<"没有值为"<<j<<"的元素是表L的第"<<k<<"的元素\n";


}
for(j=1;j<=2;j++)
{
L.GetElem(j,e);


i=L.PriorElem(e,equal,e0);
if(i)
cout<<"元素"<<e<<"的前驱为"<<e0<<endl;
else
cout<<"元素"<<e<<"无前驱,";
}
for(j=L.ListLength()-1;j<=L.ListLength();j++)
{
L.GetElem(j,e);
i=L.NextElem(e,equal,e0);
if(i)
cout<<"元素"<<e<<"无后继"<<endl;
}
k=L.ListLength();
for(j=k+1;j>=k;j--)
{
i=L.ListDelete(j,e);
if(i)
cout<<"删除第"<<j<<"个元素成功。";
else
cout<<"删除第"<<j<<"个元素失败。";
}
L.ClearList();
cout<<endl<<"清空L后,L是否为空?"<<boolalpha<<L.ListEmpty();
cout<<",表长="<<L.ListLength()<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值