Tiny girl 2017-04-09 09:29 采纳率: 0%
浏览 1051

单链表的创建及其他操作

这是一段代码,但是自己不会运行(搞不清输入顺序,希望大神给个代码运行截图,最好解释一下,谢谢了)
#include
#include
using namespace std;
struct student//定义结构体变量;
{
long int num;
double score;
student *next;
};
student *creatlink()//创建链表节点
{
student *p1,*p2,*p3,*head=NULL;//初始化头指针;
p1=new student;//动态申请内存,
cin>>p1->num>>p1->score;//输入结构体中的内容(为了好以0 0结束创建节点)
if(p1->num!=0&&p1->score!=0)
{
head=p1;
while(p1->num!=0&&p1->score!=0)//判断是不是0 0;
{
p2=new student;//再次申请内存。
p1->next=p2;
p3=p1;
cin>>p2->num>>p2->score;//输入数据
p1=p2;
}
p3->next=NULL;//尾指针置空。
}
else
head=NULL;
return head;
}
student *dellink(student *head,long m)
{
student *p=head,*p1;
while(p!=NULL)
{
if((p->num==m)&&(p==head))//如果要删除的节点在头上。
{
head=p->next;
break;
}
else if((p->num==m)&&(p->next==NULL))//删除的节点在结尾
{
p=NULL;
}
else
{
if(p->num!=m)//要删的节点在中间时判断是否是要删的节点
{
p1=p;
p=p->next;
}
else
{
p1->next=p->next;
break;
}
}
}
return head;
}
student *insertlink(student *head,student *stu)
{
student *p,*p1,*p3,*p2;
p=head;
p2=new student;//申请动态内存,为了将新的节点地址变化(如果不变第二次插入式会出错)
//cout< p2->num=stu->num;//赋值,(也可以用结构体直接赋值)
p2->score=stu->score;
p2->next=stu->next;
p1=p2;
if(head==NULL)//判断链表是否为空
{
head=p1;
p1->next=NULL;
}
else
{
while(p->next->next!=NULL)
{
if((p->num<=p1->num)&&(p->next->num>=p1->num))//判断是否是要插入的位置(此处要求输入是按升序输入的,插入时按升序插入)
{
p3=p->next;
p->next=p1;
p1->next=p3;
break;
}
p=p->next;
}
//cout<next->next< if((p->num<=p1->num)&&(p->next->num>=p1->num))//由于判断结束的标志是p->next->next,所以还有两组数据还没比较。
{
p3=p->next;
p->next=p1;
p1->next=p3;
}
else if(p->next->num<=p1->num)
{
p->next->next=p1;
p1->next=NULL;
}
}
return head;
}
void printlink(student *head)
{
student *p=head;
while(p->next!=NULL)
{
cout<num<<" "<score< p=p->next;
}
cout<num<<" "<score< }
void freelink(student *head)
{
student *p=head,*p1;
while(p!=NULL)
{
p1=p->next;//存储下一个指针的内容
delete(p);//释放p的内存
p=p1;
}
delete(p);
}
int main()
{
student *creatlink(void);
student *dellink(student *,long);
student *insertlink(student *,student *);
void printlink(student *);
void freelink(student *);
student *head,stu;
long del_num;
head=creatlink();
cin>>del_num;
head=dellink(head,del_num);
cin>>stu.num>>stu.score;
head=insertlink(head,&stu);
cin>>stu.num>>stu.score;
head=insertlink(head,&stu);
cout<<setiosflags(ios::fixed);
cout<<setprecision(2);
printlink(head);
freelink(head);
return 0;
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-04-09 10:37
    关注

    在线编译运行

    http://ideone.com/hqaHlM

    输入
    1 2
    3 4
    5 6
    1

    输出
    1 2.00
    3 4.00
    5 6.00
    142 0.00
    142 0.00

    评论

报告相同问题?

悬赏问题

  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决