十万火急!!!!!这周就要交作业啦!!!题目:设计一个处理单向链表的程序,对链表插入和删除操作
基本要求:(1)要求用C++的思想来完成程序的设计。(2)各个功能分别使用函数来完成,主函数和各个函数分别存放在不同的.cpp文件中,要求使用头文件。3.创新要求在基本要...
基本要求:(1)要求用C++的思想来完成程序的设计。
(2)各个功能分别使用函数来完成,主函数和各个函数分别存放在不同的.cpp文件中,要求使用头文件。
3. 创新要求
在基本要求达到后,进行创新设计,例如:将链表进行排序,而后插入新的结点使其仍然有序。
(1)建立单向链表,每个结点包括:学号(int),姓名(char name[]),性别(char)。
(2)将一个新的结点插入到链表中某一个结点之后。
(3)查找某一个结点将其从链表中删除。
(4)输出处理过的链表。在主函数中分别调用创建、插入、删除和输出函数。 展开
(2)各个功能分别使用函数来完成,主函数和各个函数分别存放在不同的.cpp文件中,要求使用头文件。
3. 创新要求
在基本要求达到后,进行创新设计,例如:将链表进行排序,而后插入新的结点使其仍然有序。
(1)建立单向链表,每个结点包括:学号(int),姓名(char name[]),性别(char)。
(2)将一个新的结点插入到链表中某一个结点之后。
(3)查找某一个结点将其从链表中删除。
(4)输出处理过的链表。在主函数中分别调用创建、插入、删除和输出函数。 展开
2个回答
展开全部
#include<iostream>
using namespace std;
struct Linklist
{
int data;
Linklist *next;
};
Linklist *L,*rear;
void create()//尾插法建立链表
{
Linklist *p;
int x;
cout<<"输入链表元素(按升序顺序输入):"
while(cin>>x&&x!=0)
{
if(L==NULL)
{
L=new Linklist;
L->data=x;
rear=L;
L->next=NULL;
}
else
{
p=new Linklist;
p->data=x;
rear->next=p;
p->next=NULL;
rear=p;
}
}
rear->next=NULL;
}
void del(int x)//删除data域值为x的结点
{
Linklist *p,*k,*t;
k=p=L;
while(p!=NULL)
{
if(p->data==x)
break;
k=p;
p=p->next;
}
if(p==L)
{
p=L;
L=L->next;
delete p;
}
else if(p==rear)
{
k->next=NULL;
delete p;
}
else if(p==NULL)
{
cout<<"没有值为"<<x<<"的结点 "<<endl;
}
else
{
k->next=p->next;
delete p;
}
}
void insert(int x)//插入data域值为x的结点(默认原链表为升序排列)
{
Linklist *s,*p,*k;
s=new Linklist;
s->data=x;
s->next=NULL;
k=p=L;
while(p!=NULL)
{
if(p->data>=x)
break;
k=p;
p=p->next;
}
if(p==L)
{
L=s;
s->next=p;
}
else if(p==NULL)
{
k->next=s;
}
else
{
k->next=s;
s->next=p;
}
}
void output()//将链表输出
{
Linklist *p;
p=L;
cout<<"链表中的元素为:";
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl<<endl;
}
void LinkListDemo()
{ // L是无头结点的单链表
Linklist *q, *p,*t;//p指针用于指示原链表最后的结点(即an),q指针用于指示原来的头结点(即a1)
q=L;
if ( q && q->next )
{
t=q;//将q指针指向a1
L=L->next;//将L指针指向新链表的头结点(即a2)
rear->next=q;
q->next=NULL;
t=NULL;
}
}
void main()
{
create();
output();
int x;
cout<<"输入需要插入的元素:";
cin>>x;
insert(x);
output();
cout<<"输入需要删除的元素:";
cin>>x;
del(x);
output();
LinkListDemo();
output();
}
using namespace std;
struct Linklist
{
int data;
Linklist *next;
};
Linklist *L,*rear;
void create()//尾插法建立链表
{
Linklist *p;
int x;
cout<<"输入链表元素(按升序顺序输入):"
while(cin>>x&&x!=0)
{
if(L==NULL)
{
L=new Linklist;
L->data=x;
rear=L;
L->next=NULL;
}
else
{
p=new Linklist;
p->data=x;
rear->next=p;
p->next=NULL;
rear=p;
}
}
rear->next=NULL;
}
void del(int x)//删除data域值为x的结点
{
Linklist *p,*k,*t;
k=p=L;
while(p!=NULL)
{
if(p->data==x)
break;
k=p;
p=p->next;
}
if(p==L)
{
p=L;
L=L->next;
delete p;
}
else if(p==rear)
{
k->next=NULL;
delete p;
}
else if(p==NULL)
{
cout<<"没有值为"<<x<<"的结点 "<<endl;
}
else
{
k->next=p->next;
delete p;
}
}
void insert(int x)//插入data域值为x的结点(默认原链表为升序排列)
{
Linklist *s,*p,*k;
s=new Linklist;
s->data=x;
s->next=NULL;
k=p=L;
while(p!=NULL)
{
if(p->data>=x)
break;
k=p;
p=p->next;
}
if(p==L)
{
L=s;
s->next=p;
}
else if(p==NULL)
{
k->next=s;
}
else
{
k->next=s;
s->next=p;
}
}
void output()//将链表输出
{
Linklist *p;
p=L;
cout<<"链表中的元素为:";
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl<<endl;
}
void LinkListDemo()
{ // L是无头结点的单链表
Linklist *q, *p,*t;//p指针用于指示原链表最后的结点(即an),q指针用于指示原来的头结点(即a1)
q=L;
if ( q && q->next )
{
t=q;//将q指针指向a1
L=L->next;//将L指针指向新链表的头结点(即a2)
rear->next=q;
q->next=NULL;
t=NULL;
}
}
void main()
{
create();
output();
int x;
cout<<"输入需要插入的元素:";
cin>>x;
insert(x);
output();
cout<<"输入需要删除的元素:";
cin>>x;
del(x);
output();
LinkListDemo();
output();
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询