|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请使用单链表存储整型数据,编写如下函数:
(1)创建链表;
(2)输出查看链表所有结点;
(3)根据指定的位置插入一个新结点,若插入位置超出链表范围,提示插入失败;
(4)删除所有值为x的结点;
(5)查找值为x的结点,若查找成功则输出结点,若查找失败,则提示没有该结点;
(6)销毁整个链表;
#include <iostream>
using namespace std;
struct student
{
int num;
float score;
struct student *next; //next指针变量,存放下一结点的地址
};
//尾插法
struct student *insert_t(struct student *head) //定义插入结点函数
{
struct student *p1,*p2;
cout<<"输入需要插入的新结点学号、成绩"<<endl;
p1=new struct student; //动态申请空间,要插入的结点
cin>>p1->num>>p1->score;
if(head!=NULL) // 如果链表不为空
{
p2=head;//使p2指向第一个结点
while(p2->next!=NULL) //p2指向表尾
p2=p2->next;
p2->next=p1;
}
else
{
head=p1;
}
p1->next=NULL;
return(head);
}
//插入到表头
struct student *insert_h(struct student *head)
{
student *p1,*p2;
cout<<"输入需要插入的新结点学号、成绩"<<endl;
p1=new struct student; //重新开拓存放空间给插入结点
cin>>p1->num>>p1->score;
p1->next=head;
head=p1;
return(head);
}
struct student *del(struct student *head,int num) //定义删除结点函数
{
struct student *p1,*p2;
if (head==NULL) // 是空表
{
cout<<"list null!"<<endl;
return(head);
}
p1=head; //使p1指向第一个结点首部
while(num!=p1->num && p1->next!=NULL) //p1指向的不是所要找的结点且后面还有结点
{
p2=p1;
p1=p1->next; // p1后移一个结点
}
if(num==p1->num) // 如果找到删结点
{
if(p1==head)
head=p1->next; //若p1指向的是首结点,把第二个结点地址赋予head
else
p2->next=p1->next; // 否则将下一结点地址赋给前一结点地址
delete p1;
p1=NULL;
cout<<endl;
cout<<"删除结点"<<num<<"后"<<endl;
}
else
cout<<num<<"not been found!"<<endl; //找不到该结点
return(head);
}
void print(struct student *head) //定义输出链表函数
{
struct student *p;
p=head;
if(head!=NULL)
{ cout<<"数据输出如下:"<<endl;
while(p!=NULL)
{
cout<<p->num<<" "<<p->score<<endl;
p=p->next;
}
}
}
int main()
{
struct student *head=NULL;
int n=4;
while(n--)
{
head=insert_h(head);//往链表里插入一个结点
}
print(head);
head=del(head,103);
print(head);
return 0;
}
有几个不知道怎么下手了。。
|
|