基于顺序表:
/*
一个线性表的类,实现线性表的操作
基于顺序表的线性表操作
*/
#include<iostream>
#include<new> //使用重新分配内存的placement new ,须包含new,
using namespace std;
typedef int Node;//结点数据类型
class list
{
public:
list(int leng=0) //构造方法
{
this->length=leng;
l=new Node[leng];
}
~list() //析构方法
{
this->length = 0;
this->l = NULL;
}
void clearList() //清空线性表
{
this->length=0;
}
bool listEmpty() //判断线性表是否为空
{
return this->length==0 ? true : false;
}
int listLength() //返回线性表长度
{
return this->length;
}
Node getElem(int i) //返回第i个元素的值
{
if(i>=0 && i<this->length)
{
return this->l[i];
}
else
{
exit(1); //i值不符合规定
}
}
Node priorElem(int i) //返回第i-1个元素的值
{
if(i>0 && i<this->length)
{
return this->l[i-1];
}
else
{
exit(1); //i值不符合规定
}
}
Node nextElem(int i) //返回第i+1个元素的值
{
if(i>=0 && i<this->length-1)
{
return this->l[i+1];
}
else
{
exit(1); //i值不符合规定
}
}
void listInsert(int i, Node e) //在第i个元素之前插入元素e
{
this->length++;
Node *m = new(l) Node[this->length];
int j;
for(j=this->length; j>i; j--)
{
m[j] = m[j-1];
}
m[j] = e;
l = m;
}
Node listDelete(int i) //删除第i个元素,并返回其值
{
Node re=l[i];
for(int j=i; j<this->length-1; j++)
{
l[j] = l[j+1];
}
this->length--;
return re;
}
private:
Node *l;
int length;
};
int main() //测试主函数
{
list a(0);
cout<<a.listLength()<<endl;
a.listInsert(0,1);
a.listInsert(0,2);
a.listInsert(0,3);
cout<<a.listLength()<<endl;
for(int i=0; i<a.listLength(); i++)
{
cout<<a.getElem(i)<<" ";
}
a.listDelete(1);
cout<<endl<<a.listLength()<<endl;
for(int i=0; i<a.listLength(); i++)
{
cout<<a.getElem(i)<<" ";
}
return 0;
}
基于链表:
/*
一个线性表的类,实现线性表的操作
基于 【链表】 的线性表操作
*/
#include<iostream>
using namespace std;
typedef int TYPE;//结点存储的数据类型
typedef struct Node //结点结构体
{
TYPE content;
Node *next;
};
class list
{
public:
list(int leng=0) //构造方法
{
this->length=leng;
header=new Node;
header->next = NULL;
Node *p = header;
for(int i=0; i<this->length; i++)
{
p->next = new Node;
p = p->next;
p->next = NULL;
}
}
~list() //析构方法
{
this->length = 0;
this->header = NULL;
}
void clearList() //清空线性表
{
this->length=0;
}
bool listEmpty() //判断线性表是否为空
{
return this->length==0 ? true : false;
}
int listLength() //返回线性表长度
{
return this->length;
}
TYPE getElem(int i) //返回第i个元素的值
{
if(i>=0 && i<this->length)
{
Node *p = new Node;
p=this->header;
int j=-1;
while(j != i)
{
p = p->next;
j++;
}
return p->content;
}
else
{
exit(1); //i值不符合规定
}
}
void listInsert(int i, TYPE e) //在第i个元素之前插入元素e
{
Node *temp = new Node; //创造结点
temp->content = e;
this->length++;
Node *p = this->header;
int j=0;
while(j != i)
{
p = p->next;
j++;
}
temp->next = p->next;
p->next = temp;
}
TYPE listDelete(int i) //删除第i个元素,并返回其值
{
Node *temp = new Node; //创造结点
this->length--;
Node *p = this->header;
int j=0;
while(j != i)
{
p = p->next;
j++;
}
temp = p->next;
p->next = p->next->next;
return temp->content;
}
private:
Node *header;
int length;
};
int main() //测试主函数
{
list a(0);
cout<<a.listLength()<<endl;
a.listInsert(0,1);
a.listInsert(0,2);
a.listInsert(0,3);
cout<<a.listLength()<<endl;
for(int i=0; i<a.listLength(); i++)
{
cout<<a.getElem(i)<<" ";
}
cout<<endl<<a.listDelete(1)<<endl;
for(int i=0; i<a.listLength(); i++)
{
cout<<a.getElem(i)<<" ";
}
return 0;
}