链表操作

来源:互联网 发布:红蚂蚁网络与阿里巴巴 编辑:程序博客网 时间:2024/06/03 19:09
/** 程序的版权和版本声明部分* Copyright (c)2014, 烟台大学计算机学院学生* All rightsreserved.* 文件名称: fibnacci.cpp* 作    者:高古尊* 完成日期:2014年3月20日* 版本号: v1.0** 输入描述:* 问题描述:* 程序输出:* 问题分析:*/#include<iostream>using namespace std;struct Node{    int data;//结点的数据    struct Node *next;//指向下一结点};Node *head=NULL;//将链表头定义为全局变量,以便于后面操作void make_list();//建立链表void out_list();//输出链表void make_list2();//建立链表2void search(int x);//输出链表中是否有值为 x 的结点void out_list2();//输出链表2void delete_first_node();//删除链表中的第一个结点void delete_node(int x);//删除结点值为 x 的结点void make_list3();//建立链表3void out_list3();//输出链表3void insert(int x);//将值为 x 的结点插入到由 make_list3 建立起来的有序链表中void paisu();int main( ){    int x;    make_list();    out_list();    make_list2();    out_list2();    cout<<"请输入要找的节点:";    cin>>x;    search(x);    delete_first_node();    cout<<"删除第一个节点后链表为";    out_list2();    cout<<"请输入要删除的节点:";    cin>>x;    delete_node(x);    out_list2();    return 0;}void make_list(){    int n;    Node *p;    cout<<"输入若干正数(以 0 或一个负数结束)建立链表:";    cin>>n;    while(n>0)//输入若干正数建立链表,输入非正数时,建立过程结束    {        p=new Node;//新建结点        p->data=n;        p->next=head;//新建的结点指向原先的链表头        head=p;//链表头赋值为新建的节点,这样,新结点总是链表头        cin>>n;//输入下一个数,准备建立下一个结点    }    return ;}void make_list2(){    int n;    Node *p2;    head=NULL;    cout<<"输入若干正数(以 0 或一个负数结束)建立链表:";    cin>>n;    while(n>0)//输入若干正数建立链表,输入非正数时,建立过程结束    {        p2=new Node;//新建结点        p2->data=n;        p2->next=head;//新建的结点指向原先的链表头        head=p2;//链表头赋值为新建的节点,这样,新结点总是链表头        cin>>n;//输入下一个数,准备建立下一个结点    }    return;}void make_list3(){    int n;    Node *p3;    head=NULL;    cout<<"输入若干正数(以 0 或一个负数结束)建立链表:";    cin>>n;    while(n>0)//输入若干正数建立链表,输入非正数时,建立过程结束    {        p3=new Node;//新建结点        p3->data=n;        p3->next=head;//新建的结点指向原先的链表头        head=p3;//链表头赋值为新建的节点,这样,新结点总是链表头        cin>>n;//输入下一个数,准备建立下一个结点    }}void out_list(){    Node *p=head;    cout<<"链表中的数据为:"<<endl;    while(p!=NULL)    {        cout<<p->data<<" ";        p=p->next;    }    cout<<endl;    return;}void out_list2(){    Node *p2;    p2=head;    cout<<"链表中的数据为:"<<endl;    while(p2!=NULL)    {        cout<<p2->data<<" ";        p2=p2->next;    }    cout<<endl;    return;}void out_list3(){    Node *p3;    p3=head;    cout<<"链表中的数据为:"<<endl;    while(p3!=NULL)    {        cout<<p3->data<<" ";        p3=p3->next;    }    cout<<endl;    return;}void search(int x){    Node *p2=head;    while(1)    {        if(x==p2->data)        {            cout<<"节点存在."<<endl;            break;        }        else        {            p2=p2->next;            if(p2==NULL)            {                cout<<"节点不存在."<<endl;                break;            }        }    }    return ;}void delete_first_node(){    Node *p2=head;    if (p2!=NULL)    {        head= p2->next;        delete p2;        cout<<"删除了首结点."<<endl;    }    else    {        cout<<"空链表,不能删除."<<endl;    }    return ;}void delete_node(int x){    Node *p2,*q;    if (head==NULL)        cout<<"空链表,不能删除";    else    {        //要删除的恰是首结点(不排除连续有若干个结点值为x),        while(head!=NULL&&head->data==x)        {            p2=head;            head=head->next;            delete p2;        }        if(head!=NULL)        {            p2=head;            q=p2;            while(p2!=NULL)            {                if(p2->data==x)//q就是该删除的结点                {                    q->next=p2->next;                    delete p2;                }                else     //q不该删除,继续考察下一个                {                    q=p2;                }                p2=p2->next;  //总是p的下一个结点            }        }    }    return;}

0 0
原创粉丝点击