线性链表的实现和操作

本次实现的是线性链表的操作,和上次单链表不同在于,上次只实现了表头的插入和删除,这次是对线性表的整体实现插入和删除

废话不多说,直接看代码,linked_LList.h

#include<iostream>
using namespace std;
template <class T>
struct node{
T d;
node *next;
};

template <class T>
class linked_LList{
	private:
		node<T> *head;
	public:
		linked_LList();
		void prt_linked_LList();
		void ins_linked_LList(T,T);
		int del_linked_LList(T);
};

template <class T>
linked_LList<T>::linked_LList(){
head=NULL;
return;
}

template <class T>
void linked_LList<T>::prt_linked_LList(){
	node<T> *p;
	p=head;
	if(p==NULL){cout<<"Empty linked list!"<<endl;return;}
	do{
	cout<<p->d<<endl;
	p=p->next;
	}while(p!=NULL);
	return;
}

template <class T>
void linked_LList<T>::ins_linked_LList(T x,T b){
	node<T> *p,*q;
	p=new node<T>;
	p->d=b;
	if(head==NULL){head=p;p->next=NULL;return;}//empty
	if(head->d==x){p->next=head;head=p;return;}//first node
	q=head;
	while((q->next!=NULL)&&(((q->next)->d)!=x)) q=q->next;
	p->next=q->next;q->next=p;
	return;
}

template <class T>
int linked_LList<T>::del_linked_LList(T x){
	node<T> *p,*q;
	if(head==NULL) return 0;
	if((head->d)==x) {
	p=head->next;
	delete head;
	head=p;
	return 1;
	}
	while((q->next!=NULL)&&(((q->next)->d)!=x)) q=q->next;
	if(q->next==NULL) return 0;
	p=q->next;q->next=p->next;
	delete p;
	return 1;
}
举例说明上面操作,linked_LList_main.cpp

#include"linked_LList.h"
int main(){
	linked_LList<int> s;
	cout<<"1 ouput the element"<<endl;
	s.prt_linked_LList();
	s.ins_linked_LList(10,10);
	s.ins_linked_LList(10,20);
	s.ins_linked_LList(10,30);
	s.ins_linked_LList(40,40);
	cout<<"2 ouput the element"<<endl;
	s.prt_linked_LList();
	if(s.del_linked_LList(30)) cout<<"delete:30"<<endl;
	else
		cout<<"there is no 30"<<endl;
	if(s.del_linked_LList(50)) cout<<"delete:50"<<endl;
	else
		cout<<"there is no 50"<<endl;
	cout<<"3 ouput the element"<<endl;
	s.prt_linked_LList();
	return 0;
}
这次图就不截了,不过简单的说明一下,对于链表最基本的操作,插入和删除。

关于插入:

首先,插入,要明白是要把什么东西插入到什么位置,所以2个参数,x和b,在x前面插入b。

位置就有3种情况:

1.如果本来就是空链表?那么此时b这个元素自然是表头,head和p同时指向这个位置。

2.假如是一个头结点?那么就是上次介绍的单链表,p指向head,再由head指到p就可以了,(指向:p->next=head,指到:head=p)

3.如果是中间的某个结点?首先找到要插入位置的前一个节点,如何找,上面的while循环。

然后,就是就是连接进去,也就是p指向q的指向,q的指向再到p,来回就是这样的。

关于删除:

1.要删除什么?2.先说到底有没有这个元素?

所以3种情况:

1.如果是空表?那么就没什么好删除的,退出;

2.如果是一个元素头结点?和上面的是一个道理

3.如果是中间的某个元素?

3.1.假如遍历完,没有?那自然不用删除

3.2.发现元素,这个元素的前一个结点为q,自己为p,所以q指向到p的指向,释放p,就可以了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值