链表的创建,删除,插入,显示 *** 作。
以学生的学号,成绩为例
#include
using namespace std;
struct student
{
int num;
int score;
student*next;
};
int n;//用来计数
student*creat()
{
student*head,*p1,*p2;
head=NULL;//头节点赋值
n=0;
p1=p2=new student;
cout<<"请输入学生的学号与成绩,退出学号请输入0";
cin>>p1->num>>p1->score;//输入信息
while(p1->num!=0){//判断输入的信息是否有效
n=n+1;//计数的变化
if(n==1) {
head=p1;//头节点赋值
}
else {
p2->next=p1;//连接起整个链表点
}
p2=p1;//储存
p1=new student;//开辟新空间
cin>>p1->num>>p1->score;//信息输入
}
p2->next=NULL;//无效退出
return (head);
}
struct student*del(struct student*head,int num)
{
struct student *p1,*p2;
if(head==NULL)
{
cout<<"空列表";
return NULL;
}//特殊情况
p1=head;
while(num!=p1->num&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}//没找到节点,循环
if(p1->num==num) //找到节点
{
if(num==head->num)//头节点
head=head->next;
else
p2->next=p1->next;
n=n-1;
}
else
cout<<"没找到";
return head;
}
struct student*insert(struct student*head,student*stu)
{
student*p0,*p1,*p2;
p1=head;
p0=stu;
if(head==NULL)
{
head=p0;
p0->next=NULL;//空链表
}
else
{
while((p0->num>p1->num)&&(p1->next!=NULL))//中间
{
p2=p1;
p1=p1->next;
}//没找到插入点的情况
if(p0->num<=p1->num)//找到后
{
if(head==p1)//头节点
head=p0;
else
p2->next=p0;
p0->next=p1;//插入后
}
else//末尾
{
p1->next=p0;
p0->next=NULL;
}
n=n+1;
return (head);
}
}
void print(student*head)
{
student*p;
p=head;
while(p!=NULL)
{
cout<
}
}
int main()
{
student *head,stu;
head=creat( );
print(head);//打印
cout<<"请输入删除的学生号码";
int dnum;
cin>>dnum;
head=del(head,dnum);
print(head);
cout<<"请输入插入的学生信息";
cin>>stu.num>>stu.score;
head=insert(head,&stu);
print(head);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)