问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求C语言大作业一份(是链表最佳,其他亦可)

发布网友 发布时间:2022-04-29 19:09

我来回答

2个回答

热心网友 时间:2022-06-20 08:54

#include <iostream>
using namespace std;

struct node
{
int data;
node *next;
};
class list{

public:
list();
~list();
int length();
void input_elem(const int n);//创建长度为n的链表
void insert_elem(const int i,int data);//在某个位置插入元素
void get_elem (const int i);//按序号取元素
int end_point (node *p);//判断是否为最后一个结点
void delete_elem (const int i);//删除元素
void print();//输出链表
node *get_locate(int i);
node *get_head();//取头结点
void set_insert(node *L,int data);//保持递增序列插入节点
void copy_list(node *P,node *Q,node *R);//奇数项和偶数项结点分解开
void same_quality(node *A,node *B,node *C);//求两个递增有序链表的公共元素
private:
int count;
node *head;

};
int list::end_point (node *p)
{
if(p->next==NULL)
return 1;
else return 0;
}
list::list()
{
head=new node;
head->next=NULL;
count=0;
}
list::~list()//从头结点开始一个一个的删除结点
{
node *p,*q;
p = head->next;
while(p!=NULL)
{
q = p;
p = p->next;
delete q;
}
}
int list::length()
{
int n=0;
node *p=head->next;
while(p!=NULL)
{
n++;
p=p->next;
}
return n;
}
void list::input_elem(const int n)
{
node *p,*pre;
pre = head;
for(int i=0;i<n;i++)
{
p=new node;
cin>>p->data;
pre->next=p;
pre=p;
count++;
}
pre->next=NULL;
}
void list ::insert_elem(const int i,int data)
{
node *p,*s;
p=head;
int k=0;
if(i<1||i>count)
{
cout<<"序号错误!"<<endl;
}
else{
while(k!=i-1)
{
p=p->next;
k++;
}
s=new node;
s->data=data;
s->next=p->next;
p->next=s;
count++;
}
}

void list::get_elem (const int i)
{
node *p;
p=head->next;
int k=1;
if (i<1||i>count)
{
cout<<"序号错误!"<<endl;
}
else
{
while (k!=i)
{
p=p->next;
k++;
}
cout<<"该链表的的第"<<i<<"个元素为"<<p->data<<endl;
}
}
void list::delete_elem (const int i)//删除元素
{
node *p,*q;
p=head;
if (i<1||i>count)
{
cout<<"序号错误!"<<endl;
}
else
{
for (int k=1;k<=i-1;k++)
{
p=p->next;
}
q=p->next;
if (end_point(q))
{
delete q;
}
else
{
p->next=q->next;
delete q;
}
count--;
}

}
void list::print()//输出链表
{
node *p;
p=head;
p=p->next;
while (p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}

node *list::get_locate(int i)
{
node*u=head;
int m=0;
if(i>count)
return NULL;
while(m<i&&u!=NULL)
{
u=u->next;
m++;
}
if(m==i)
return u;
else return NULL;
}

node *list::get_head()
{
return head;
}
void list::set_insert(node *L,int data)
{
node *p=L,*q;
while (p->next!=NULL&&p->next->data<data)
{
p=p->next;
}
if (p->next==NULL||p->next->data>data)
{
q=new node;
q->data=data;
q->next=p->next;
p->next=q;
}
}
void list::copy_list(node *P,node *Q,node *R)//奇数项和偶数项结点分解开
{
node *q1;
node *r1;
node *p = P;
p = p->next;
node *q = Q;
node *r = R;
while(p!=NULL)
{
q1 = new node;
q1->data = p->data;
q->next = q1;
q = q1;
p = p->next;
if(p!=NULL)
{
r1 = new node;
r1->data = p->data;
r->next = r1;
r = r1;
p = p->next;
}
}
q1->next = NULL;
r1->next = NULL;
}
void list::same_quality(node *A,node *B,node *C)//求两个递增有序链表的公共元素
{
node *Pa ;
node *Pb ;
node *Pc ;
node *u;
Pc=C;
Pa=A->next;
Pb=B->next;
while(Pa!=NULL&&Pb!=NULL)
if (Pa->data<Pb->data)
Pa=Pa->next;
else if(Pa->data>Pb->data)
Pb=Pb->next;
else
{
u=new node;
u->data=Pa->data;
Pc->next=u;
Pc=u;
Pa=Pa->next;
Pb=Pb->next;
}
Pc->next=NULL;
}
int main()
{
list A;
list B;
list C;
int m;
int n;
int i;
int data;
cout<<"创建一个链表A其长度n,请输入n "<<endl;
cin>>n;
cout<<"输入链表的各结点"<<endl;
A.input_elem (n);
while(1)
{
cout<<endl<<endl;
cout<<"1 求链表中第i个结点的指针"<<endl;
cout<<"2 在i之前插入一个数"<<endl;
cout<<"3 删除链表中第i个元素结点"<<endl;
cout<<"4 在一个递增有序的链表L中插入一个值为x的元素,并保持其递增有序特性"<<endl;
cout<<"5 将单链表中的奇数项和偶数项结点分解开 "<<endl;
cout<<"6 求两个递增有序链表L1和L2中的公共元素"<<endl;
cout<<"请输入你的选择:"<<endl;
cin>>m;
cout<<endl;
cout<<endl;
switch(m)
{
case 1:
{
cout<<"******************************************"<<endl;
cout<<"求链表中第i个结点的指针,请输入i:"<<endl;
cin>>i;
cout<<"结点i的指针为:"<<endl;
cout<<A.get_locate(i)<<endl;
cout<<"******************************************"<<endl;
break;
}
case 2:
{
cout<<"******************************************"<<endl;
cout<<"在i之前插入一个数 ,请输入i:";
cin>>i;
cout<<"请输入要插入的数X:";
cin>>data;
A.insert_elem (i,data);
A.print();
cout<<"******************************************"<<endl;
cout<<endl;
cout<<endl;
break;
}

case 3:
{
cout<<"******************************************"<<endl;
cout<<"删除链表中第i个元素结点:"<<endl;
cin>>i;
A.delete_elem (i);
A.print();
cout<<"******************************************"<<endl;
cout<<endl;
cout<<endl;
break;
}

case 4:
{
cout<<"******************************************"<<endl;
cout<<"创建一个递增的链表长度为n,请输入n:";
cin>>n;
A.input_elem(n);
cout<<"插入一个值为data的元素,并保持其递增有序特性:";
cin>>data;
A.set_insert(A.get_head(),data);
cout<<"******************************************"<<endl;
cout<<endl;
cout<<endl;
break;
}

case 5:
{
cout<<"******************************************"<<endl;
cout<<"创建一个链表长度为n,请输入n: ";
cin>>n;
A.input_elem (n);
A.copy_list (A.get_head(),B.get_head(),C.get_head());
cout<<"链表奇数项的元素为:";
B.print ();
cout<<"链表偶数项的元素为:";
C.print ();
cout<<"******************************************"<<endl;
cout<<endl;
cout<<endl;
break;
}
case 6:
{
cout<<"创建一个链表L1长度为n,请输入n:"<<endl;
cin>>n;
cout<<"输入链表的各结点"<<endl;
A.input_elem (n);
cout<<"创建一个链表L2长度为n,请输入n:"<<endl;
cin>>n;
cout<<"输入链表的各结点"<<endl;
B.input_elem (n);
C.same_quality (A.get_head(),B.get_head(),C.get_head());
cout<<"含有L1和L2相同元素的链表L3为:"<<endl;
C.print ();
cout<<"******************************************"<<endl;
cout<<endl;
cout<<endl;
break;
}

}
}
cout<<endl;
return 0;
}

这是一个单链表

热心网友 时间:2022-06-20 08:55

想学好的话还是自己写
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 怎么把word中的单张纵向改成横向? 我是女生,想考刑警学院研究生,物证技术专业,选择院系的时候,是痕迹检验技术系还是文件检验技术比较好 我国现今运用的刑事科学技术手段有哪些? vivox520参数移动版 对于手写信投邮的匿名信,如何用文件检验技术开展侦破工作 如何快速的查找到二叉树中任意两个节点的最底层的公共父节点 文件检验鉴定书包括哪些内容? 关于构建两个单链表 文件检验技术的特点??? 判断两个链表是否相交,要算法,思路,急 文件检验的基本方法 请编写一个函数,判断两个单项链表是否有公共节点 c语言 如何求二叉树最接近的共同祖先 25万韩币等于多少中国人民币? java可以判断俩个链表的公共子节点吗?如果可以,请举例 25万英镑折合人民币是多少 25万丹拿等于多少人民币 数据结构 什么叫两个单链表的公共结点 定义 已知两个单链表(无环)有一个公共节点,为什么链表尾部一定重合? 25万台币等于多少人民币 中国刑警学院的文件检验专业都学习哪些专业课?学习过程中对学生有哪些要求?顺利毕业有哪些要求? 笔迹鉴定的历史研究 学刑事侦查技术专业 好吗? 请问文检或痕检类的刑事科学技术*的工作是什么样的?麻烦了解的人帮忙~谢谢 vivo25x和oppoRenoZ那个好 公安局的文检具体都做什么工作啊 photoshop在文书鉴定中的应用 VIVO25X实体店多少钱? 中国刑警学院的文件检验专业实力如何?主要学什么?我刚录取。 传统的刑事科学技术学科体系分为哪几部分? 法医是否属于 刑事科学技术及 侦查? 中国*大学刑事科学技术(文件检验技术)研究生考试科目是621的化学还是622的物理啊,还是两个都考? 中国人民*大学法学硕士考试科目中的法硕联考专业基础(法学)和法硕联考专业综合(法学)包括哪些啊? 计算机犯罪侦查系和刑事科学技术专业哪个好 关于文检或痕检类的刑事科学技术*的工作情况,麻烦了解的人进~谢谢 我是一名生物技术专业的学生,不过我想考*类的公务员,可以吗。 得过疝气会影响生育吗 疝气会影响生育吗 腹股沟疝气影响生育吗? 疝气对结婚生育有影响吗