数据结构题。。根据要求写出核心算法和运行的代码。。急求大神。。。 10
已知带头结点的单链表A中各元素的值为整形数。设计算法将该链表分解为相同结构的A和B两个链表,使表A中存放原表中的所有值为奇数的结点,B表中存放原表中所有值为偶数的结点。...
已知带头结点的单链表A中各元素的值为整形数。设计算法将该链表分解为相同结构的A和B两个链表,使表A中存放原表中的所有值为奇数的结点,B表中存放原表中所有值为偶数的结点。
展开
1个回答
展开全部
根据已有的代码做了修改,供参考:
#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;
}
#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 广告
2020-10-29 广告
Tempo大数据分析平台,是一款面向企业用户的数据分析与应用工具,为用户提供报表设计、可视化分析、机器学习、文本分析等自助式数据分析与探索。平台基于大数据架构,集数据接入、数据分析探索、成果管理与应用为一体,面向企业全民用户提供从数据到业务...
点击进入详情页
本回答由美林数据技术股份有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询