【算法】单链表的一些操作(存取、查找、取出、插入、删除)
一、单链表结构的建立与输出
#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({});