问题及代码:
/*
*Copyright (c) 2014,烟台大学计算机学院
*All rights reserved.
*文件名称:lily.cpp
*作者:李莉
*完成日期:2015年6月3日
*版本号:v1.0
*问题描述:编写函数void search(int x),输出链表中是否有值为x的结点。
删除链表中的首结点
程序输入:输入若干正数
*程序输出:运行结果
*/
#include <iostream>
#include <cstdio>
using namespace std;
struct Node
{
int date;
struct Node *next;
};
Node *head=NULL;
void make_list();
void out_list();
void search(int x);
void deletehead();
int main()
{
int b;
make_list();
out_list();
cout<<"请输入要查询的结点:"<<endl;
cin>>b;
search(b);
deletehead();
out_list();
return 0;
}
void make_list()
{
int n;
Node *p,*q;
cout<<"请输入若干正数,以0或负数表示输入结束:";
cin>>n;
while(n>0)
{
p=new Node;
p->date=n;
p->next=NULL;
if(head==NULL)//第一次把head设定为空指针是为了找到头结点的位置
head=p;
else
q->next=p;
q=p;
cin>>n;
}
return;
}
void out_list()
{
Node *p=head;
cout<<"链表中的数据为:";
while(p!=NULL)
{
cout<<p->date<<" ";
p=p->next;
}
cout<<endl;
return;
}
void search(int x)
{
Node *p=head;
while(p!=NULL&&p->date!=x)
{
p=p->next;
}
if(p!=NULL)
cout<<"链表中有值为"<<x<<"的结点"<<endl;
else
cout<<"链表中没有值为"<<x<<"的结点"<<endl;
return;
}
void deletehead()
{
Node *p=head;
if(p!=NULL)
{
head=p->next;
delete p;
cout<<"删除了首结点!"<<endl;
}
else
cout<<"空链表,不可以删除!"<<endl;
return ;
}
运行结果:
心得体会:
删除的特殊方式,关于链表,我总觉得无论任何处理,都是比较特殊的处理方式,都比平常的数据处理要复杂,要慢慢适应,但是不可否认的是的确链表很好用