数据结构--线性表操作

基于顺序表:

/*
	一个线性表的类,实现线性表的操作
	基于顺序表的线性表操作
*/
#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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值