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

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

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

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

#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) 
	}
}


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

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

    分享给朋友:

    相关文章

    字符串的输入输出汇总

    做字符串的题目的时候,经常会遇到输入输出不对的情况,这篇文章就简单总结一下字符串常见的输入输出。2.cin基本操作:#include<iostream> #include<cstd...

    【初级篇】函数(一)

    【初级篇】函数(一)

    0.函数的引入为什么要用函数呢?比较官方的说法是,过程的复用,你的一段逻辑,你有一段逻辑不断的在复用,就封装成函数去调用它。通俗的说法就是,把重复的过程集中到一块。例如,大家都学过如何求正方形的面积,...

    【题解】均分纸牌

    【题目描述】有n堆纸牌,编号分别为 1,2,…, n。每堆上有若干张,但纸牌总数必为n的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为1的堆上取的纸牌,只能移到编号为 2 的堆上;在...

    最小生成树—基本概念

    一、最小生成树核心概念1. 基本定义一个带权无向连通图的最小生成树,是指从该图中选择若干条边,构成一个包含图中所有顶点的树结构(无环、连通),且所有选中边的权值之和最小。2. 关键性质生成树的本质:包...

    【数据结构】栈的基本操作

    0.前言上一篇中简单介绍了栈的定义,这一篇中介绍栈的基本用法,包含压栈,出栈,判断栈空,判断栈中元素个数等。下面进行详细介绍1.基本用法本文介绍的栈的主要操作,使用栈之前加入<stack>...

    混合背包

    1.问题定义:混合背包问题是经典背包问题的一个变种,其中物品的类型不单一,而是混合了以下三种类型:01 背包物品:每种物品最多只能选一次。完全背包物品:每种物品可以选择无限次。多重背包物品:每种物品有...