【算法】单链表的一些操作(存取、查找、取出、插入、删除)
一、单链表结构的建立与输出
#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)
}
}扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

