当前位置:首页 > C++目录 > 正文内容

【算法】单链表的一些操作(存取、查找、取出、插入、删除)

亿万年的星光4年前 (2021-12-18)C++目录1840

一、单链表结构的建立与输出

#include<iostream>
using namespace std;
struct Node{
	int data;
	Node *next;
};
Node *head, *p, *r;  //r指向链表的当前最后一个结点,可以称为尾指针 
int x;
int main(){
	cin>>x;
	head=new Node;  //申请头结点
	r=head;  
	while(x!=-1){  //读入的数非-1 
		p=new Node;  //否则,读入一个新结点 
		p->data=x;  //把数据放入数据域 
		p->next=NULL; // 先把当前这个结点的指针域变为NULL
		r->next=p;  //把新结点链接  接到前面的链表中(p可以认为是一个结点的头指针), 
		r=p; //尾指针后移一个
		cin>>x; 
	}
	
	p=head->next;  //头指针没有数据,只能从第一个结点开始就可以了 
	while(p->next !=NULL)
	{
		cout<<p->data<<" ";
		p=p->next;		
	} 
	cout<<p->data<<endl;	
	return 0; 
}

二、单链表的操作—查找满足条件的结点

	p=head->next;  //头指针没有数据,只能从第一个结点开始就可以了 
	while(p->data !=x && (p->next)!=NULL)
		p=p->next;
	if(p->data==x){
		//如果找到要找的数据,那么准备处理 
	}else{
		//如果没找到,则做其他处理 
	}
	//还可以按照下面的代码,处理所有遇到的数据。
	p=head->next;
	while(p-next!=NULL){
		if(p->data==x){
			//处理数据 
		}
		p=p->next; 
	}	

三、取出第i个结点的数据域

void get(Node *head,int i){
	Node *p;int j;
	p=head->next;
	j=1;
	while(p!=NULL && (j<i)){
		p=p->next;
		j=j+1;
	} 
	if((p!=NULL) && (j==i))
		cout<<p->data;
	else
		//输出其他	
}

四、单链表的插入操作

void insert(Node * head,int i,int x){//插入x到第i个元素之前 
	Node *p,*s;
	int j;
	p=head;
	j=0;
	while((p!=NULL)&&(j=i-1)){
		p=p->next;
		j=j+1; 
	} 
	if(p==NULL){
		cout<<"NO";
	}else{
		s=new Node;
		s->data=x;
		s->next=p->next;
		p->next=s;
	}
}

五、单链表的删除操作

void delete(Node *head,int i){
	Node *p,*s;
	int j;
	p=head;
	j=0;
	while((p->next!=NULL) && (j<i-1)){
		p=p->next;
		j=j+1;
	} 
	if(p->next==NULL){
		cout<<"NO";
	}else{
		s=p->next;
		p->next=p->next->next;
		//或者 p->next =s->next;
		free(s) 
	}
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【数论】组合数学—容斥原理

    【数论】组合数学—容斥原理

    概念在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重...

    图的遍历

    【题目描述】给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。【...

    STL入门——简单介绍

    一、STL是什么?    STL(Standard Template Library)即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ S...

    CSP复赛必备,时间与空间估算

    CSP复赛必备,时间与空间估算

    一、时间估算       在竞赛环境中,一般运行程序的时间是1s。这要求我们尽量不要循环太多次数,一般情况下,建议将时间复杂度控制在10^8以内。 ...

    如何判断回文数/回文串

    所谓回文,就是从左往右读和从右往左读都是一样的,这样的数字或者字符称为回文数/回文字符。做题的时候经常能看到判断回文操作。判断回文的一般有两种,一种是数字类型,一种是字符类型。两种分别介绍一下。一、回...

    最小生成树—Kruskal(克鲁斯卡尔)算法

    最小生成树—Kruskal(克鲁斯卡尔)算法

    一、算法描述在一个连通加权无向图中,找到一棵最小生成树。即,找到连接所有顶点的、权值总和最小的树,且树中不包含任何环。二、核心思想贪心策略:每次从未选择的边中,选取一条权值最小的边。避免环路:如果加入...