C++单链表插入翻转更新删除等基本操作及实例运行结果

来源:互联网 发布:南海九江房价走势数据 编辑:程序博客网 时间:2024/06/08 02:35

链表是一种复杂的数据结构,其数据之间的相互关系使链表分成三种:单链表、循环链表、双向链表,这里介绍单链表。

我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要。链表可以满足我们这种需求。它在程序的执行过程中根据需要,有数据存储就向系统要求申请存储空间,不会对存储区的浪费。链表中的每一个节点的数据类型为结构体类型,节点有两个成员:整型成员和指向下一个结构体类型节点的指针。

c++代码

#include<iostream>using namespace std;//定义节点struct node{  int data;  node *next;};//定义节点类class list{public:    list();    void insert(int val);    void reverse();    void updata(int val,int add_val);    void remove(int val);    void print();private:    node *head;    node* find(int val);};//查找节点位置的函数node* list::find(int val){    node *p=head;    for(;p;p=p->next)    {        if(p->next->data==val)        break;    }    return p;}list::list()//这是构造函数,初始化对象的数据成员,小工程可使用系统默认的析构函数{ head=NULL;//头结点不放数据}//按顺序插入void list::insert(int val){    node *p=new node();    p->data=val;    p->next=NULL;    if(head==NULL) //空链表    {      head=p;    }    else    {      node *q,*r;      q=head;      while(q&&q->data<=p->data)        {          r=q;          q=q->next;         }       if(q!=NULL)       {          p->next=q;          r->next=p;       }       else       {          p->next=NULL;          r->next=p;       }    }}//翻转元素void list::reverse() {    if(head==NULL)        return;     node * p = head;     node * q = head->next;     node * temp;     while(q)     {         temp=q->next;         q->next=p;         p=q;         q=temp;     }     head->next=NULL;     head=p; }//更新指定数据void list::updata(int val,int add_val) {     node *p=find(val);     p->next->data=add_val; }//删除元素void list::remove(int val){  if(head==NULL)  {  cout<<"链表为空时不能删除元素"<<endl;  }  else if(head->data==val)  {    head=head->next;  }  else  {   int flag=1;//删除完全标志   while(flag)   {     node *p=head;     node *q;     while(p&&p->data!=val)     {       q=p;       p=p->next;      }     if(p)      q->next=p->next;     else      flag=0;   }  }}//输出void list::print(){  node *p;  p=head;  if(head==NULL)  {   cout<<"链表为空"<<endl;  }  else  {    while(p)    {     cout<<p->data<<" ";     p=p->next;    }    cout<<endl;  }}int main(){    list List;    for(int i=0;i<20;++i)    List.insert(i+1);    cout<<"单链表为:";    List.print();    List.reverse();    cout<<"翻转后的链表为:";    List.print();    List.updata(5,555);    cout<<"更新数据后的链表为(这里将5替换为555):";    List.print();    List.remove(10);    cout<<"删除元素10后的链表为:";    List.print();    return 0;}

运行结果




阅读全文
0 0
原创粉丝点击