当前位置:首页 > C++知识 > 正文内容

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

亿万年的星光4年前 (2021-12-18)C++知识1470

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

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


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

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

分享给朋友:

相关文章

判断闰年

代码参考:#include<iostream>  using namespace std; //判断闰年的函数  int leap(...

C++中的位宽与保留小数

C++中的位宽与保留小数

一、setw函数C++ setw() 函数用于设置字段的宽度,语法格式如下setw(n)比如:#include <bits/stdc++.h> using names...

【算法】前缀和与差分(3)二维数组前缀和

【算法】前缀和与差分(3)二维数组前缀和

0.前言前面的一篇文章,介绍了一维数组的前缀和,这篇文章中,介绍一下二维数组的前缀和1.定义二维数组的前缀和就是按照二维数组求和。公式如下:那二维前缀和中一个f[i][j]表示的意思就是以(1,1)为...

STL入门——简单介绍

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

深搜剪枝技巧

一、什么是剪枝     首先应当明确的是,“剪枝”的含义是什么。我们知道,搜索的进程可以看作是从树根出发,遍历一棵倒置的树——搜索树的过程。而所谓剪枝,顾名思义...

树的存储结构

【方法1:数组】称为父亲表示法const int m=10;          ...