单链表部分操作

本人所有文章都受版权保护,著作权归本人(Joseph_tony)所有,未经授权,禁止转载,若不得不转载,请注明原文网址链接!谢谢配合!

以下所有内容相互连接

0.结构体定义

typedef struct node//定义方式
{
      
};//结尾一定一定一定要加分号";",绝对绝对!!!!!

1.定义节点

typedef struct node
{
	int data;//数据域,存放数据信息 
	
	node *next;//指针域,存放下一个节点的地址 
}node;

2.链表插入

2.1区分->和.
-> 用过指针进行间接引用时使用

. 进行直接引用时使用

void insert(node *p,node e)//这里只介绍右插法
{
	// 将节点e插入到p位置  
	//1. 右插  插入p的右边
	
	node *aft=p->next;// aft中存储p后一个节点位置
	e.next=aft; 
	p->next=&e;	 
	/*
	上方步骤基本等同于
	int a,b,t;    cin>>a>>b>>t;
	t=a;
	a=b;
	b=t;
	*/
}

3.链表创建

void creat(node *h,int n)
{
	// 将n个元素 创建成一个单链表
	node *p=h;//p指向链表的最后一个元素 
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;//输入数字
		
		//开辟新的节点空间
		node *s=new node;// 开辟node类型的空间,将地址给s
		//能通过指针s指向新的空间
		
		s->data=x;//将数字存入
		s->next=NULL; //使下一个空间为空
		
		// 将新节点s插入到链表的后边  尾插法 
		insert(p,s);
		// 位置的更新
		p=s; 
		
			
//		// 将新节点s插入到链表的前边  头插法
//		insert(h,s); 
	}
}

4.链表遍历

void show(node *h)
{
	//遍历链表
	
	node *p=h->next; 
	while(p!=NULL){//p不为空
		cout<<p->data<<" ";//输出可进行改动
		//p向后移动
		p=p->next; //将p下一个空间赋值为p
	} 
}

5.链表查找

node *search(node *h,int k){
	// 返回链表中数据为k的节点位置
	node *p=h->next; 
	while(p!=NULL){//p不为空
		//cout<data<<" ";
		if(p->data==k) return p;//p的数据等于所需寻找的内容,返回p
		//p向后移动
		p=p->next; //将p下一个空间赋值为p
	}
	return NULL;
}

本人所有文章都受版权保护,著作权归本人(Joseph_tony)所有,未经授权,禁止转载,若不得不转载,请注明原文网址链接!谢谢配合!

你可能感兴趣的:(c++)