【C++数据结构学习笔记---线性表】用单链表实现线性表

【C++数据结构学习笔记---线性表】用单链表实现线性表

一个简单的实现例子,只用到了插入函数以及输出函数,初始化26个英文字母,删除第三个字母,即C。

插入算法的思路:(insert)本算法为结点后插入

1、声明一结点p指向链表第一个结点,初始化i从0开始。

2、遍历链表,让指针p向后移动,直至移动到要插入元素的结点,即向后移动k-1次。

3、在系统中新建一个结点s。

4、判断k的值,如果值为0代表在第一个结点前插入元素。使用s->next=first; first=s;语句来插入。

如果值不为0,则使用s->next=p->next; p->next=s;

删除算法的思路:(erase)本算法为删除第k个结点

1、声明一结点p指向链表第一个结点,初始化i从0开始。

2、判断k的值,如果值为1代表删除第一个结点,则使用first=first->next; delete p;语句来删除。

如果值不为1,执行3。

3、遍历链表,让指针p向后移动,一直移动到要删除结点的前一个结点,即向后移动k-2次。

4、标记一个q指针,赋值为q=p->next;即q指向要删除的结点。

5、执行删除语句p->next=q->next(这里也可以理解为p->next=p->next->next,即跳过要删除的那个结点)

6、释放q结点。

#include 
using namespace std;
template 
class List;
template 
class Node
{
	friend class List;
private:
	T data;
	Node *next;
};
template 
class List
{
public:
	List(){first=0;}						//构造函数
	~List();								//析构函数
	bool empty()const{return 0==first;}		//测试表是否为空
	int size()const;						//返回表的长度
	bool retrieve(int k,T& x)const;			//返回表位置k处的元素x
	int locate(const T& x)const;			//返回元素x在表中的位置
	List& insert(int k,const T& x);		//在位置k处插入元素x
	List& erase(int k);					//从位置k处删除元素
	void print_list();						//打印表
private:
	Node *first;
};
template 
List::~List()
{
	Node *p=first;
	while(first){
		p=first->next;
		delete first;
		first=p;
	}
}
template 
int List::size()const
{
	Node *p=first;
	int len=1;
	while(p)
	{
		p=p->next;
		++len;
	}
	return len;
}
template 
bool List::retrieve(int k,T& x)const
{
	Node *p=first;
	int i=0;
	while(p && (inext;
		++i;
	}
	if (p){
		x=p->data;
		return true;
	}
	else
		return false;
}
template 
int List::locate(const T& x)const
{
	Node *p=first;
	int i=1;
	while(p){
		if (p->data==x){
			return i;
		}
		p=p->next;
		++i;
	}
	return 0;
}
template 
List& List::insert(int k,const T& x)
{
	Node *p=first;
	int i=0;
	while(p && inext;
		++i;
	}
	Node *s=new Node;
	s->data=x;
	if (k){
		s->next=p->next;
		p->next=s;
	}
	else{
		s->next=first;
		first=s;
	}
	return *this;
}
template 
List& List::erase(int k)
{
	Node *p=first;
	int i=0;
	if (1==k){
		first=first->next;
		delete p;
	}
	else{
		while(p && inext;
			++i;
		}
		Node *q=p->next;
		p->next=q->next;
		delete q;
	}
	return *this;
}
template 
void List::print_list()
{
	Node *p=first;
	while(p)
	{
		cout <data <<" ";
		p=p->next;
	}
}
int main()
{
	int s1,s2;
	s1='A';
	s2='Z';
	List p;
	for(int i=s2;i>=s1;i--){
		p.insert(0,i);
	}
	p.erase(3);
	p.print_list();
	return 0;
}

你可能感兴趣的:(数据结构,【原创】)