C++实现数据结构中的单链表

#include<iostream>
using namespace std;
//定义一个节点类
class Node{
public:
	int data;
	Node *next;
	Node():next(NULL){}
	Node(const int &value,Node *next_=NULL):data(value),next(next_){}

};
//定义一个单单链表
class Linklist{
private:
	Node *head;
public:
	Linklist():head(new Node){}
	//判断链表是否为空
	bool is_empty()const
	{
		if(head->next==NULL)
			return true;
		return false;
	}
	//判断链表的长度
	int get_length()
	{
		int length=0;
		Node *p=head->next;
		while(!p)
		{
			++length;
			p=p->next;
		}
		return length;
	}
	//返回第i=个元素的值
	Node *get_value(int i)
	{
		if(i<=0||i>get_length())
		{
			cout<<"error"<<endl;
			return NULL;
		}
		else
		{
			Node *p=head->next;
			int j=1;
			while(p&&j<i)
			{
				p=p->next;
				++j;
			}
			return p;
		}
	}
  //在第i个位置之前插入相应元素的值
	bool insert_pos(int value,int i)
	{
		if(i<=0||i>get_length())
		{
			cout<<"无法插入相应的元素"<<endl;
			return false;
		}
		else
		{
			int j=1;
			Node *p=head;
			while(p&&j<i)
			{
				p=p->next;
				++j;
			}
			Node *newnode=new Node(value);
			newnode->next=p->next;
			p->next=newnode;
			return true;
		}
	}
	//下面顶一个采用尾插法插值的函数
	void insert(int value)
	{
		Node *p=head;
		Node *q=p;
		while(p)
		{   q=p;
			p=p->next;
		}
		Node *newnode=new Node(value);
		q->next=newnode;
	}

	void display()
	{
		if(head->next==NULL)
			return ;
		Node *p=head->next;
		while(p)
		{
			cout<<p->data<<'\t';
			p=p->next;
		}
	}
	//定义一个删除某个节点的函数
	void delete_node(int value)
	{
		Node *pos_node=NULL;
		Node *q=head;
		Node *p=head->next;
		while(p)
		{
			if(p->data==value)
			{
				pos_node=p;
				break;
			}
			q=p;
			p=p->next;
		}
		if(!p)
		{
			cout<<"找不到要删除的结点"<<endl;
			return ;
		}
		Node *s;
		q->next=pos_node->next;

	}

};

int main()
{
	Linklist l1;
	l1.insert(1);
	l1.insert(2);
	l1.insert(3);
	l1.insert(4);
	l1.insert(5);
	l1.insert(6);
	l1.insert(7);
	l1.display();
	cout<<endl;
	l1.delete_node(4);
	l1.display();
	system("pause");
	return 0;
}

时间: 2024-10-29 00:08:50

C++实现数据结构中的单链表的相关文章

STL源码笔记(16)—单链表slist

STL单链表slist简介 概述 slist(Single linked list)顾名思义,是一个单向链表,这个容器并不在标准规格之内,在我几年的代码学习生涯中也是第一次听说,既然侯老师的书中提到了,那也还是学习一蛤. slist与list的主要差别是,前者的迭代器属于单向的Forward Iterator(可读写),后者的迭代器属于双向的Bidirectional Iterator(可以双向读写).看起来slist的功能应该会不如list,但由于其单向链表的实现,其消耗的空间更小,某些操作更

数据结构上机测试2-1:单链表操作A (顺序建表+关键字删除)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

单链表 --- 合并两个单链表

合并单链表 --> 一.解决方法: 确保两个单链表不为空,且二者皆有序(若无序,则先进行排序) 创建新的单链表,并比较原本两个单链表数据大小,较小者置于新单链表中 逐步将两个单链表的数据置于新单链表中,直至二者为空 二.程序代码: ListNode* MergeList(ListNode *L1,ListNode *L2)//合并两个单链表 { ListNode *newHead=NULL; ListNode *tail=NULL; if(L1==NULL) { return L2; } if(

线性表—单链表

.1.链式存储结构实现 单链表和双链表(这边讲单链表). 2.基础概念 a.结点:结点由数据域和地址域(链)两部分组成.而结点整体在效果上可以看作是该结点的地址(指针).这个地址域一般是后继元素的地址(即下一个结点的总体).所以最后一个元素的地址域为^,其表示空,即没有后续元素.b.单链表:每个结点只有一个地址域的线性链表称为单链表.c.双链表:每个结点有两个地址域的线性表链称为双链表,两个地址域分别指向前驱元素和后继元素. 3.单链表的实现 线性表接口LList: package com.cl

数据结构基础(8) --单链表的设计与实现(1)之基本操作

链表简介 数组的缺点: 1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O(N); 2.数组的删除:除了在数组的末尾删除元素之外,在数组的其他任何位置删除元素都需要进行数组元素的频繁移动(删除位置之后的元素都需往前移动), 时间复杂度也为O(N); 链表的特点: 由于在链表中插入/删除元素都不需要进行数据的移位, 只需要O(1)时间完成, 因此链表适用于频繁插入与删除的情况; 但是链表也有缺点

04.线性表(三)链式存储结构.单链表2

链式存储结构.单链表2 顺序存储结构的创建实质是一个数组的初始化,存储空间连续且其大小和类型已经固定:单链表存储空间不连续,是一种动态结构且它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成. 一.单链表的整表创建 创建单链表的过程就是一个动态生成链表的过程,即从"空表"的初始化起,依次建立各元素结点,并逐个插入链表. 1.算法思路 (1)声明一个结点p和计数器变量i; (2)初始化一空链表L (3)让链表L的头结点的指针指向NULL,即建立一个带头

第22课 单链表的实现

1. LinkList类的设计要点                    (1)用类模板实现,通过头结点访问后继结点 (2)定义内部结点类型Node(注意继承于自定义的Object顶层父类),用于描述数据域和指针域. (3)实现线性表的关键操作(增.删.查等) 2. 单链表的内部结构 (1)头结点在单链表中的意义:辅助数据元素的定位,方便插入和删除操作: (2)头结点不存储实际的数据元素 3. 单链表的操作 (1)插入元素 ①从头结点开始,通过current指针定位到目标位置(注意:curren

数据结构之线性表——链式存储结构之单链表(php代码实现)

<?php /**  *  * 1. 类LNode用作创建单链表时,生成新的节点.  * 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表)  * 3. CreateListHead: 具有$num个数据元素的单链表的创建--头插法  * 4. CreateListTail: 具有$num个数据元素的单链表的创建--尾插法  * 5. DestroyList: 销毁单链表  * 6. ClearList:清空单链表  * 7. Li

数据结构之 线性表---单链表操作A (删除链表中的指定元素)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的