《数据结构》将一个带头结点的单链表分解成两个单链表
2016-03-22 15:24
609 查看
将一个带头结点的单链表分解成两个单链表
题目描述:
/*
设计一个算法,将一个带头结点的单链表分解成两个具有相同结构的
链表B和C,其中B白哦的结点为A中小于0的结点,C表的结点为A中大于0 的结点,
要求B和C 仍利用A表的结点。 (A表的元素都是非0元素)
*/
算法思想:‘
假设原来的连败哦是LA,将La,分解成LB和LC,首先需要生成两个头结点,LB和LC;设置三个指针*pa,*pb,*pc,初始时,pa指向LA的第一个结点,pb指向LB的头结点,pc指向LC的头结点;然后遍历LA,当pa->data>0时,就将pa指向的结点插入到LB的后面,即pb->next=pa,然后让pb指向该结点,即pb=pb->next,指针pa后移pa=pa->next,表LB最后一个结点的指针域置空。当pa->data<0时,就将pa指向的结点插入到LC的后面,即pc->next=pa,然后让pc指向该结点,即pc=pc->next,指针pa后移pa=pa->next,表LC最后一个结点的指针域置空。
描述如下:
实现:
题目描述:
/*
设计一个算法,将一个带头结点的单链表分解成两个具有相同结构的
链表B和C,其中B白哦的结点为A中小于0的结点,C表的结点为A中大于0 的结点,
要求B和C 仍利用A表的结点。 (A表的元素都是非0元素)
*/
算法思想:‘
假设原来的连败哦是LA,将La,分解成LB和LC,首先需要生成两个头结点,LB和LC;设置三个指针*pa,*pb,*pc,初始时,pa指向LA的第一个结点,pb指向LB的头结点,pc指向LC的头结点;然后遍历LA,当pa->data>0时,就将pa指向的结点插入到LB的后面,即pb->next=pa,然后让pb指向该结点,即pb=pb->next,指针pa后移pa=pa->next,表LB最后一个结点的指针域置空。当pa->data<0时,就将pa指向的结点插入到LC的后面,即pc->next=pa,然后让pc指向该结点,即pc=pc->next,指针pa后移pa=pa->next,表LC最后一个结点的指针域置空。
描述如下:
void Resolve(LinkList &LA,LinkList &LB,LinkList &LC){ struct LNode *pa,*pb,*pc; pa=LA->next; LB=new LNode; LC=new LNode;//要生成两个新的头结点!!! //LB=LC=LA;//不能这样写,这样写最后输出的LB和LChi一样的表,居然会一样??为什么?? pb=LB; pc=LC; struct LNode *p; p=pa; while(pa){ if(pa->data>0){ pb->next=pa; pa=pa->next; pb=pb->next; pb->next=NULL; }else if(pa->data<0){ pc->next=pa; pa=pa->next; pc=pc->next; pc->next=NULL; } } }
实现:
/*
设计一个算法,将一个带头结点的单链表分解成两个具有相同结构的
链表B和C,其中B白哦的结点为A中小于0的结点,C表的结点为A中大于0 的结点,
要求B和C 仍利用A表的结点。 (A表的元素都是非0元素)
*/
#include<stdio.h>
#define MAX 100
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
int InitList(LinkList &L){
L=new LNode;
L->next=NULL;
return 1;
}
int ListLength(LinkList L){
int length=0;
struct LNode *p;
p=L->next;
while(p){
++length;
p=p->next;
}
return length;
}
void TraveList(LinkList L){
struct LNode *p;
p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void CreateList(LinkList &L,int n){
L=new LNode;
L->next=NULL;
struct LNode *p;
p=L;
for(int i=0;i<n;i++){
struct LNode *s;
s=new LNode;
printf("请输入%d个结点的值:",i+1);
scanf("%d",&s->data);
s->next=NULL;
p->next=s;
p=s;
}
}
void Resolve(LinkList &LA,LinkList &LB,LinkList &LC){ struct LNode *pa,*pb,*pc; pa=LA->next; LB=new LNode; LC=new LNode;//要生成两个新的头结点!!! //LB=LC=LA;//不能这样写,这样写最后输出的LB和LChi一样的表,居然会一样??为什么?? pb=LB; pc=LC; struct LNode *p; p=pa; while(pa){ if(pa->data>0){ pb->next=pa; pa=pa->next; pb=pb->next; pb->next=NULL; }else if(pa->data<0){ pc->next=pa; pa=pa->next; pc=pc->next; pc->next=NULL; } } }
int main(){
LinkList LA,LB,LC;
if(LinkList(LA)){
printf("LA初始化成功!\n");
}else{
printf("LA初始化失败!\n");
}
if(LinkList(LB)){
printf("LB初始化成功!\n");
}else{
printf("LB初始化失败!\n");
}
if(LinkList(LC)){
printf("LC初始化成功!\n");
}else{
printf("LC初始化失败!\n");
}
printf("请输入LA的长度:");
int n1;
scanf("%d",&n1);
CreateList(LA,n1);
TraveList(LA);
Resolve(LA,LB,LC);
TraveList(LB);
TraveList(LC);
return 0;
}
相关文章推荐
- 人们为了方便使用数据,整合出了数据结构,这样我们使用和存储数据方便了,我们只需要实现数据结构
- Python-数据结构之单链表的实现
- List of data structures:数据结构大全
- 数据结构(6): 链队——队列的链式表示和实现
- 数据结构(5):循环队列——队列的顺序表示和实现
- HDU 2594 数据结构之KMP
- HDU 3746 数据结构之KMP
- Python 数据结构与算法——图(Graph)
- 51nod--1174 区间中最大的数 (RMQ)
- 数据结构-swust-oj-折半查找的实现
- Python 数据结构与算法——引用计数
- Python 数据结构与算法——deque
- Python 数据结构与算法——二分图(bipartite graph)
- TreeSet唯一性以及有序性底层剖析
- 重学数据结构系列之——哈希表
- 数据结构与算法学习(五)(续)
- 数据结构与算法学习(六)
- 数据结构(4):链栈的表示和实现
- 数据结构--栈的反转练习题
- 数据结构(3):顺序栈的表示和实现