链表(LinkList)---单链表

一、链表的基本概念

  1. 链表是一种物理上不连续、非顺序的存储结构,数据元素之间通过指针关联在一起。
  2. 链表有一系列的节点构成,每个节点至少包含两部分信息:元素数据、指向下一个节点的指针。
  3. 链表的特点:
    1)空间开销大(物理空间不连续)
    2)可以动态添加新的节点
    3)查找元素只能按顺序查找

二、单向链表

  1. 图示
    1
  2. 节点代码
class Node{//节点
    public:
        int data;
        Node* pNode;
}
  1. 链表代码
class LinkList{
	Node* head;
	public:
	    LinkList(){
	        head=new Node;
			head->data=0;
			pNode=NULL;
		}
	    ~LinkList(){delete head;}
	    void CreatLinkList(int n);//创建链表
	    void InsertNode(int position,int d);//插入节点
	    bool isEmpty();
	    int getLength();
	    void deleteNode(int position);
	    void deleteLinkList();
};
  1. 创建链表—指定要创建的节点个数
void LinkList::CreatLinkList(int n){
	if(n<0)
	{
		cout<<"error";
		exit(EXIT_FAILURE);
	}
	Node *pnew,*tmp;
	tmp=head;
	for(int i=1;i<=n;i++
	{
		pnew=new Node;
		cout<<"请输入第"<<i<<"节点的值"<<endl;
		cin>>pnew->data;
		pnew->pNode=NULL;
		tmp->pNode=pnew;
		tmp=pnew;
	}
}
  1. 节点的插入
    在这里插入图片描述
void LinkList::InsertNode(int position,int d){//d为数据,position为位置
	if(position<0||position>getLength()+1)
	{
		cout<<"error";
		exit(EXIT_FAILURE);
	}
	Node *tmp,*pnew;
	tmp=head;
	pnew=new Node;
	pnew->data=d;
	while(position-->0)
		tmp=tmp->pNode;
	pnew->pNode=tmp->pNode;
	tmp->pNode=pnew;
}
  1. 判断链表是否为空
bool LinkList::isEmpty(){
	if(head->pNode==NULL)
		return true;
	else
		return false;
}
  1. 获取链表的长度
int LinkList::getLength(){
	int length=0;
	Node*p;
	p=head->pNode;
	while(p!=NULL)
	{
		length++;
		p=p->pNode;
	}
}
  1. 删除链表中指定位置的节点
    在这里插入图片描述
void LinkList::deleteNode(int position){
	if (position < 0 || position > GetLength()) {
		cout << "输入位置错误!" << endl;
		exit(EXIT_FAILURE);
	}
	Node*p=head;
	Node*tmp;
	while(position-->1)
		p=p->pNode;
	tmp=p->PNode;
	p->pNode=tmp->pNode;
	delete tmp;
}
  1. 删除链表
void LinkList::deleteLinkList(){
	Node *p=head->pNode;
	Node *tmp;
	while(p!=NULL)
	{
		tmp=p;
		p=p->pNode;
		head->pNode=p;
		delete tmp;
	}
}

三、循环单向链表

  1. 图示在这里插入图片描述
  2. 区别:创建头节点时,其指针指向head而非NULL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值