您的位置:首页 > 其它

链表操作

2014-03-23 14:38 218 查看
/*
* 程序的版权和版本声明部分
* 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();
//建立链表2
void search(int x);
//输出链表中是否有值为 x 的结点
void out_list2();
//输出链表2
void delete_first_node();
//删除链表中的第一个结点
void delete_node(int x);
//删除结点值为 x 的结点
void make_list3();
//建立链表3
void out_list3();
//输出链表3
void 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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct 链表