已知线性表La和Lb中的元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。

已知线性表La和Lb中的元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。,第1张

#include<iostream>

using namespace std;

#include <ctime>

typedef int ElemType;

//节点定义

typedef struct LNode

{

ElemType data;

struct LNode next;

}LNode,LinkList;

//手动方式创建链表

LinkList Manual_Create_LinkList(int n)

{ cout<<"采用手动方式创建链表:"<<endl;

LinkList _LinkList = new LNode();

if(_LinkList)

{_LinkList->next = NULL;}

for(int i = 0 ; i < n ; i++)

{ LinkList p = new LNode();

cout<<"输入第"<<(i+1)<<"个元素:";

cin>>p->data;

p->next = _LinkList->next;

_LinkList->next = p;

}return _LinkList;}

//自动方式创建链表

LinkList Auto_Create_LinkList(int n)

{ cout<<"采用自动随机数方式创建链表:"<<endl;

LinkList _LinkList = new LNode();

if(_LinkList)

{_LinkList->next = NULL;}

srand(time(0)); //seed

for(int i = n; i > 0 ; i--)

{

LinkList p = new LNode();

p->data = rand() % 100+ 1;

p->next = _LinkList->next;

_LinkList->next = p;

}

return _LinkList;

}

/插入非递减有序单向链表/

void Insert_Sort_LinkList(LinkList &_LinkList,ElemType _Var)

{

LinkList _LinkList1,_LinkList2;

_LinkList1 = new LNode();

_LinkList1->data = _Var;

_LinkList2=_LinkList;

while(_LinkList2->next && _LinkList2->next->data <=_Var)

{_LinkList2 = _LinkList2->next;}

_LinkList1->next = _LinkList2->next;

_LinkList2->next = _LinkList1;

}

//建立非递减有序单向链表

LinkList Manual_Create_Ordered_LinkList(int _int)

{

cout<<"采用手动方式建立非递减有序单向链表:"<<endl;

LinkList _LinkList = new LNode();

if(_LinkList)

{_LinkList->next = NULL;}

int i = 0;int j = 0;int k = 0;ElemType _Var;

for(i=0;i<_int;i++)

{

cout<<"输入第"<<(i+1)<<"个元素:";

cin>>_Var;

Insert_Sort_LinkList(_LinkList,_Var);

}

return _LinkList;

}

//销毁链表

void Destroy_LinkList(LinkList myLinkList)

{

LinkList _LinkList1,_LinkList2;

if(!(myLinkList))

{cout<<"链表不存在!"<<endl;return;}

_LinkList1 = myLinkList;

while(_LinkList1 != NULL)

{

_LinkList2 = _LinkList1;

_LinkList1 = _LinkList1->next;

delete(_LinkList2);

}

myLinkList = NULL;

}

//遍历链表

void Traveral_LinkList(LinkList myLinkList)

{

cout<<"------------------------------"<<endl;

cout<<"遍历链表中的元素:"<<endl;

int i = 0;

/第一种遍历方式/

LinkList _LinkList = myLinkList->next;

while(_LinkList)

{

cout<<"输出第"<<(i+1)<<"个元素:"<<_LinkList->data<<endl;

_LinkList = _LinkList->next;

i++;

}

/第二种遍历方式/

/

LinkList _LinkList;

for(_LinkList = myLinkList->next;_LinkList;_LinkList=_LinkList->next)

{

cout<<"输出第"<<i<<"个元素:"<<_LinkList->data<<endl;

i++;

}

/

cout<<"------------------------------"<<endl;

}

//查找元素

LinkList Locate_LinkList(LinkList myLinkList,ElemType x)

{ while(myLinkList && myLinkList->data != x)

{

myLinkList = myLinkList->next;

}

return myLinkList;

}//反转链表

void Reverse_LinkList(LinkList &myLinkList)

{

LinkList TempLinkList = NULL;

LinkList _LinkList = myLinkList->next; //指向第一个元素

myLinkList->next = NULL; //指向最后一个元素

while(_LinkList)

{

TempLinkList = _LinkList;

_LinkList = _LinkList->next; //下移

TempLinkList->next = myLinkList->next;

myLinkList->next = TempLinkList;

}

}

/删除指定元素/

void Delete_LinkList(LinkList myLinkList,ElemType x)

{

int i = 0;

if(!myLinkList)

{cout<<"链表不存在!"<<endl;return;}

/[Begin]第一种方法/

/

LinkList _LinkList1 = myLinkList;

LinkList _LinkList2 = myLinkList->next;

while(_LinkList2 && _LinkList2->data != x)

{ _LinkList1 = _LinkList2;

_LinkList2 = _LinkList2->next;

} if(!_LinkList2)

{cout<<"值没有找到!"<<endl;return;}

else

{ _LinkList1->next = _LinkList2->next;

delete(_LinkList2);

}

/

/[End]第一种方法/

/[Begin]第二种方法/

//

LinkList _LinkList = myLinkList;

//循环条件:下个结点不为NULL,并且下个结点不为x

while(_LinkList->next != NULL && _LinkList->next->data != x)

{_LinkList = _LinkList->next;}

//判断是否已经循环到最后一个结点

if(_LinkList->next == NULL)

{cout<<"值没有找到!"<<endl;return;}

LinkList TempLinkList = _LinkList->next;

_LinkList->next = TempLinkList->next;

delete(TempLinkList);

/[End]第二种方法/

}

void main()

{ LinkList myLinkList;

int i=0;int num = 0;

/[Begin]手动创建链表--------------------/

cout<<"使用手动输入创建链表,输入要创建的链表的元素个数:";

cin>>num;

myLinkList = Manual_Create_LinkList(num);

Traveral_LinkList(myLinkList); //遍历链表

/[End]手动创建链表---------------------/

/[Begin]删除元素值---------------------/

cout<<"输入要删除的元素值:";

cin>>num;

Delete_LinkList(myLinkList,num);

Traveral_LinkList(myLinkList); //遍历链表

/[End]删除元素值----------------------/

Destroy_LinkList(&myLinkList); //销毁链表

/[Begin]随机数创建链表---------------------/

num = 0;

cout<<"使用随机数创建链表,输入要创建的链表的元素个数:";

cin>>num;

myLinkList = Auto_Create_LinkList(num);

Traveral_LinkList(myLinkList); //遍历链表

/[End]随机数创建链表----------------------/

/[Begin]链表元素反转---------------------/

cout<<"将随机数创建的链表元素反转:";

Reverse_LinkList(myLinkList);

Traveral_LinkList(myLinkList); //遍历链表

/[End]链表元素反转----------------------/

Destroy_LinkList(&myLinkList); //销毁链表

/[Begin]建立非递减有序单向链表---------------------/

cout<<"使用手动输入建立非递减有序单向链表,输入要创建的链表的元素个数:";

cin>>num;

myLinkList = Manual_Create_Ordered_LinkList(num);

Traveral_LinkList(myLinkList); //遍历链表

/[End]建立非递减有序单向链表----------------------/

} 这是可执行程序,希望能帮到你

第一个TraverseList(La);输出的结果为La=(26,34,57,79,100);

第一个TraverseList(La);输出的结果为La=(57,79,100,34);

第一个TraverseList(La);输出的结果为La=(79,34,57,26,100);

其中:

Insert 就是将一个新元素插入线性表,使得插入后的结果有序

InsertFront 就是将一个新元素插在线性表的最前面

InsertRear 就是将一个新元素插在线性表的最后面

DeleteFront 就是将线性表的最前面的元素删除

ClearList 就是清空线性表

TraverseList 就是将线性表从头到尾输出一遍

开始两个链表都是单链表,而且是递增的,要想让它们合并成一条链表并且递减,那么就得想好对策,因为链表是从头往尾走,从小往大走,所以每次都比较两链表的大小,选出最小的往新链表的头部插进去,并且被选中的链表向后走一个元素,那么就能保证每次插入新链表的元素都不小于之前插入的元素,这样就能得到递减的新链表。if-else语句就是来选较小元素插入新链表,插入的方法与将一个元素插入链表的方法是一样的。第一个while语句做完之后一定会有一个链表的元素先为空,后面两个while语句就是用来判断最后还有哪个链表中有元素,有的话就直接一个一个插入新链表即可。有关链表的程序,掌握方法后就能触类旁通。

在了解LA劳安认证如何办理之前先了解一下LA劳安认证。什么是LA劳安认证呢特种劳保用品是指在劳动作业生产过程中对人体起到特殊保护作用的安全防护用品,与之对应的是普通劳保用品,如防护眼镜、劳保鞋等。常见的特种劳保用品有过滤式防毒面具、正压式空气呼吸器、防化服、防冲击面罩等。

LA劳安认证如何办理LA劳安认证申请条件是什么

1 具有所在国的合法经营资格(营业执照、生产许可证资质证明等);

2 所制造的产品应符合现行有效的中国国家标准、行业标准及有关规定;

3 必须满足生产所必须具备的条件(生产场所、设备、检测、管理等);

4 必须满足生产所必须具备的人资条件( *** 作人员、技术人员、检测认识、管理人员等);

5 生产产品所必须具备的相关技术性、控制性、指导性资料;

6 有完善的管理机构、健全的管理制度和产品安全防护性能保障体系;

7 法律、法规、行业规范、标准等规定的其他条件。

8 国内代理商、进口商及其他单位;

9 具有中国工商行政管理部门核发的营业执照;

10 有与产品制造商签订的有效合法的委托协议或长期稳定的供货合同;

11 有完善的合同管理制度;

12 有完善的管理机构及健全的管理体系;

13 销售人员必须熟悉所销售产品的安全防护性能及使用方法。

如果您觉得LA劳安认证办理程序繁琐,那么可以通过安徽楷锐企业管理咨询有限公司来办理LA劳安认证,专业高效,一站式服务,帮助您轻松解决认证难题,获取权威认证证书。>

#include<stdioh>

#include<malloch>

/声明库函数/

struct Node

{

int data;

Node next;

};/定义结点结构/

void Create(Node root) /生成单链表/

{

Node p,q;

int count;

if( NULL == root)

return;

p = root;

printf("请输入节点的个数:");

scanf("%d",&count);

for(int i = 0; i<count; i++)

{

q = (Node)malloc(sizeof(Node));

printf("请输入节点数据:");

scanf("%d",&(q->data));

p->next = q;

p = q;

p ->next =NULL;

}

}

Node Combine(Node root1, Node root2) /合并两个单链表,并返回新单链表的表头指针/

{

Node root3 = (Node)malloc(sizeof(Node));

Node p1,p2,p3;

p1 = root1 ->next;

p2 = root2 ->next;

p3 = root3;

while(p1 != NULL&&p2 != NULL)

{

if(p1 ->data < p2 ->data)

{

p3 ->next = p1;

p3 = p3 ->next;

p1 = p1 ->next;

}

else

{

p3 ->next = p2;

p3 = p3 ->next;

p2 = p2 ->next;

}

}

while(p1 == NULL && p2 != NULL)

{

p3 ->next = p2;

p3 = p3 ->next;

p2 = p2 ->next;

}

while(p2 == NULL && p1 != NULL)

{

p3 ->next = p1;

p3 = p3 ->next;

p1 = p1 ->next;

}

return root3;

}

/下面为主方法/

int main()

{

Node root1,root2,Combine_Root;

Node p,q;

root1 = (Node)malloc(sizeof(Node));

root2 = (Node)malloc(sizeof(Node));

Create(&root1); /生成单链表1/

Create(&root2);/生成单链表2/

Combine_Root = Combine(root1,root2); /合并单链表/

for(p = Combine_Root ->next; p != NULL; p = p ->next)

printf("%d",p ->data);

free(root1);

free(root2);

for(p = Combine_Root; p != NULL; )

{

q = p;

p = p ->next;

free(q);

}

return 0;

}

程序是合并La,Lb,存放到Lc中,关键是要排序。两个链表都是降序排列的,合并后的链表也是降序排列。Lc=pc=la,是将la的头,接至Lc和pc。pc是一个工具指针,用来作为中间变量使用,用来遍历链表。while语句部分是排序,比较值大小,选择插入的节点。

楼上的说了原理,我还是给一个运行通过的程序你吧。

遍历La,大于等于0放在Lb,其他放在Lc。

#include "stdafxh"

#include <stdlibh>

#include <stdioh>

typedef struct NODE

{

struct NODE next;

int data;

} T_NODE;

// 输入链表存储

void InputData(struct NODE pHead)

{

int count = 10;

T_NODE p = pHead;

while(count-- > 0)

{

p->next = (struct NODE )malloc(sizeof(struct NODE));

scanf("%d", &(p->next->data));

p->next->next = NULL;

p = p->next;

}

p = pHead;

while(p->next)

{

printf("%d ", p->next->data);

p = p->next;

}

printf("\n");

}

int _tmain(int argc, _TCHAR argv[])

{

// 生成单链表头结点

struct NODE pHead_La = (struct NODE )malloc(sizeof(struct NODE));

pHead_La->data = 0;

pHead_La->next = NULL;

// 输入正负数

InputData(pHead_La);

struct NODE pHead_Lb = (struct NODE )malloc(sizeof(struct NODE));

pHead_Lb->data = 0;

pHead_Lb->next = NULL;

struct NODE pHead_Lc = (struct NODE )malloc(sizeof(struct NODE));

pHead_Lc->data = 0;

pHead_Lc->next = NULL;

T_NODE p = pHead_La;

T_NODE pPostive = pHead_Lb;

T_NODE pNegative = pHead_Lc;

while(p->next)

{

// 正数和0

if (p->next->data >= 0)

{

pPostive->next = (struct NODE )malloc(sizeof(struct NODE));

pPostive->next->data = p->next->data;

pPostive->next->next = NULL;

pPostive = pPostive->next;

}

else

{

pNegative->next = (struct NODE )malloc(sizeof(struct NODE));

pNegative->next->data = p->next->data;

pNegative->next->next = NULL;

pNegative = pNegative->next;

}

p = p->next;

}

pPostive = pHead_Lb;

while(pPostive->next)

{

printf("%d ", pPostive->next->data);

pPostive = pPostive->next;

}

printf("\n");

pNegative = pHead_Lc;

while(pNegative->next)

{

printf("%d ", pNegative->next->data);

pNegative = pNegative->next;

}

printf("\n");

return 0;

}

以上就是关于已知线性表La和Lb中的元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。全部的内容,包括:已知线性表La和Lb中的元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。、下面的每个程序段中,假定线性表La的类型为List,元素类型ElemType为int,并假定每个程序段是连续执行的。、下面的C语言程序,合并单链表La和Lb。if语句往下几行,具体是什么意思呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9683475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存