数据结构题。。根据要求写出核心算法和运行的代码。。急求大神。。。 10

已知带头结点的单链表A中各元素的值为整形数。设计算法将该链表分解为相同结构的A和B两个链表,使表A中存放原表中的所有值为奇数的结点,B表中存放原表中所有值为偶数的结点。... 已知带头结点的单链表A中各元素的值为整形数。设计算法将该链表分解为相同结构的A和B两个链表,使表A中存放原表中的所有值为奇数的结点,B表中存放原表中所有值为偶数的结点。 展开
 我来答
濮方雅BX
2012-11-01 · TA获得超过4042个赞
知道大有可为答主
回答量:2482
采纳率:60%
帮助的人:2477万
展开全部
根据已有的代码做了修改,供参考:
#include <iostream>
using namespace std;
typedef struct node{
int data;
struct node *pNext;
}Node;
/*建立n个元素的链表*/
Node *CreatLink(int n)
{
int i;
Node *pHead, *p,*q;
if(n<=0)return NULL;
pHead=(Node*)malloc(sizeof(Node));
if(NULL == pHead) return NULL;
q = pHead;
q->pNext = NULL;
printf("\n创建链表:请输入%d个整数:",n);
scanf("%d",&(q->data));
for(i=0;i<n-1;i++)
{
p=(Node*)malloc(sizeof(Node));
if(p == NULL)
{
printf("alloc error\n");
exit(1);
}
else
{
q->pNext = p;
q=p;
q->pNext = NULL;
scanf("%d",&(q->data));
}
}
return pHead;
}
/*删除链表*/
int DeleteLink(Node * &pHead)
{
Node *p,*q;
if(NULL == pHead) return 0;
q = pHead;
p=q->pNext;
printf("\n删除链表");
while(NULL != p)
{
free(q);
q=p;
p=q->pNext;
}
free(q);
pHead = NULL;
return 0;
}
/*输出链表*/
int PrintLink(Node *pHead)
{
Node *p,*q;
printf("\n输出链表:");
if(NULL == pHead)
{
printf("空链表!");
return 0;
}
q = pHead;
p=q->pNext;
while(NULL != p)
{
printf("%d -> ",q->data );
q=p;
p=q->pNext;
}
printf("%d .",q->data );
return 0;
}
/*将该链表分解为相同结构的 pOdd 和 pEven 两个链表,
使表
pOdd 中存放原表中的所有值为奇数的结点,
pEven中存放原表中所有值为偶数的结点
*/
int SplitLink(Node* pHead,Node* &pOdd,Node* &pEven)
{
Node *p,*q,*pEvenNext,*pOddNext;
pOdd = NULL;
pOddNext = NULL;
pEven = NULL;
pEvenNext = NULL;
printf("\n分解链表:");
if(NULL == pHead)
{
printf("空链表!");
return 0;
}
q = pHead;
p = q->pNext;
while(NULL != p)
{
if((q->data) %2 == 0)
{
if(NULL == pEven )
{
pEven = q;
pEvenNext = pEven ;
}
else
{
pEvenNext->pNext = q;
pEvenNext = pEvenNext->pNext;
}
}
else
{
if(NULL == pOdd )
{
pOdd = q;
pOddNext = pOdd ;
}
else
{
pOddNext->pNext = q;
pOddNext = pOddNext->pNext;
}
}
q=p;
p=q->pNext;
}
/*最后一个元素*/
if((q->data) %2 == 0)
{
if(NULL == pEven )
{
pEven = q;
}
else
{
pEvenNext->pNext = q;
}
if(NULL != pOddNext)
pOddNext->pNext =NULL;
}
else
{
if(NULL == pOdd )
{
pOdd = q;
}
else
{
pOddNext->pNext = q;
}
if(NULL != pEvenNext)
pEvenNext->pNext =NULL;
}
return 0;

}
/*单向链表演示程序*/
int main()
{
Node *head,*pOdd,*pEven;
head = CreatLink(6);
PrintLink(head);

SplitLink(head,pOdd,pEven);
printf("\n奇数链表输出:");
PrintLink(pOdd);
printf("\n偶数链表输出:");
PrintLink(pEven);

DeleteLink(pOdd); DeleteLink(pEven);
return 0;
}
追问
那请问这个代码的算法是什么啊。。。
美林数据技术股份有限公司
2020-10-29 广告
Tempo大数据分析平台,是一款面向企业用户的数据分析与应用工具,为用户提供报表设计、可视化分析、机器学习、文本分析等自助式数据分析与探索。平台基于大数据架构,集数据接入、数据分析探索、成果管理与应用为一体,面向企业全民用户提供从数据到业务... 点击进入详情页
本回答由美林数据技术股份有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式