当前位置:编程学习 > C/C++ >>

一个关于C++链表的问题

已经编好了,只是有一点小错误,麻烦高手找出来说明并修改
改后要能运行的。
如果正确追加悬赏!
答案://动态链表,链表的生成,长度,插入,删除,打印。
#include<iostream>
#include<string>
using namespace std;
#define NULL 0






//指向为空时设为0
int n=0;







//链表的长度n
struct link
{
int num;






//学号

string name;







//姓名

link *next;



};

link *creat()






//链表的产生,返回链表头
{
link *head, *p1, *p;
p1=p=new link;
cout<<"请输入链表(以0为结束):"<<endl;
cin>>p1->num>>p1->name;
head=NULL;
while(p1->num!=0)







//p1开辟新节点,以0为输入结束
{







n++;







//链表增加一个节点
if(n==1) head==p1;
else p->next=p1;










//p1所指的节点连接在p的后面
p=p1;






//p指向链表的最后一个节点
p1=new link;
cin>>p1->num>>p1->name;
}
p->next=NULL;






//末尾为空
return(head);
}

void print(link *head)





//打印每个节点的内容
{
link *p;
p=head;
if(head!=NULL)
do {cout<<p->name<<","<<p->name<<"-->";

p=p->next;





//指针向后移一位
}while(p!=NULL);
cout<<endl;
}

void dele(link *head)





//删除第k个节点的内容
{
int key=1,k;
link *p1,*p2;
cout<<endl<<"输入要删除的节点的位置k:";
cin>>k;
if(head=NULL){ cout<<"这是空表!"<<endl; }
p1=head;
while(key!=k&&p1->next!=NULL)
{ p2=p1;p1=p1->next; key++; }




//没有到达k位置就向后移一位
if(key==k)
{
if(p1==head) head=p1->next;
else { p2->next=p1->next; n--; }




//后一节点赋值给前一节点,删除p1当前指向
}
else cout<<"找不到这个节点!"<<endl;
cout<<"删除 "<<k<<" 节点后的链表为"<<endl;
print(head);
}

void insert(link *head)







//插入节点in到第k个节点
{
int k;

link *in;
cout<<endl<<"输入要删除的节点的位置k:";
cin>>k;
cout<<endl<<"要插入的节点:";
in=new link;








//开辟一个新节点
cin>>in->num>>in->name;
int key=1;
link *p1,*p2,*p0;
p1=head;
p0=in;
if(k>n) { cout<<"插入点过长!"<<endl; }

//大于链表的长度
else
{
while(key<k && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
key++;
}
if(head==p1)head=p0;
else p2->=p0;
p0->next=p1;
n++;
}
cout<<"在 "<<k<<" 处插入节点后的链表为"<<endl;
print(head);
}

int main()
{
link *head;






//*in为要插入的节点
head=creat();






//链表的生成
print(head);







//链表的打印
dele(head);







//节点的删除
insert(head);






//节点的插入
return 0;
}
..

上一个:怎样用C++语言编辑
下一个:C++问题。。高手进来。。。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,