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

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

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

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

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


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

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

分享给朋友:

相关文章

NOIP/CSP-J复赛历年考点

2000计算器的改良税收与补贴乘积最大单词接龙模拟、字符串模拟字符串、动态规划广度优先bfs、字符串2001数的计数最大公约数与最小公倍数求先序排列装箱问题模拟模拟、函数二叉树贪心2002级数求和选数...

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

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

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

NOIP2013年普及组初赛题目及答案分析

NOIP2013年普及组初赛题目及答案分析

一、单项选择题1. 一个 32 位整型变量占用( A )个字节。 A. 4    B. 8      C. 32     &nbs...

【STL】二分查找函数(算法)—binary_search

【说明】binary_search() 实现了一个二分查找算法。它会在前两个参数指定范围内搜索等同于第三个参数的元素。指定范围的迭代器必须是正向迭代器而且元素必须可以使用 < 运算符来比较。这个...

2021 年青岛市程序设计竞赛试题(小学组)决赛

2021 年青岛市程序设计竞赛试题(小学组)决赛

1.方程求解【描述】输入正整数 a,b,c。求有多少组 x 和 y 满足 a*x+b*y=c 。x 和 y 都是非负整数。【输入】一行,包含三个正整数 a,b,c,两个整数之间用单个空格隔开。【输出】...

【数据结构】栈—括号匹配检验

【数据结构】栈—括号匹配检验

【题目描述】假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[  (  [  ] [  ] ) ] 等为正确的匹配,[&nbs...