青少年编程知识记录 codecoming

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

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

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



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:C++知识 浏览: