《数据结构》2.5-将链表A分解成B和C
2016-05-14 20:50
549 查看
/* 设计一个算法,将带头结点的单链表A分解成两个结构相同的单链表B和C 使得B中的元素是A中大于等于0的元素,C中的元素是A中小于0的元素。 要求存储空间仍使用A的存储空间。 */ #include<stdio.h> typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; /* 初始化单链表 */ int InitList(LinkList &L){ L=new LNode; L->next=NULL; return 1; } //创建链表 void CreateList(LinkList &L,int n){ L=new LNode; L->next=NULL; for(int i=0;i<n;i++){ printf("请输入第%d个元素的值:",i+1); struct LNode *p; p=new LNode; scanf("%d",&p->data); p->next=L->next; L->next=p; } } //遍历 void TraveList(LinkList L){ struct LNode *p; p=L->next; while(p){ printf("%d ",p->data); p=p->next; } printf("\n"); } void CutList(LinkList &A,LinkList &B,LinkList &C){ struct LNode *pa,*pb,*pc; pa=A->next; //B=C=A; B=new LNode; C=new LNode; B->next=NULL; C->next=NULL; pb=B; pc=C; 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 A,B,C; if(InitList(A)){ printf("链表A初始化成功!\n"); }else{ printf("链表A初始化失败!\n"); } if(InitList(B)){ printf("链表B初始化成功!\n"); }else{ printf("链表B初始化失败!\n"); } if(InitList(C)){ printf("链表C初始化成功!\n"); }else{ printf("链表C初始化失败!\n"); } printf("请输入链表A的长度:"); int n1; scanf("%d",&n1); CreateList(A,n1); printf("链表A的结构如下:\n"); TraveList(A); CutList(A,B,C); printf("B链表的结构如下:\n"); TraveList(B); printf("C链表的结构如下:\n"); TraveList(C); return 0; }
相关文章推荐
- java核心数据结构(二)——Map类族
- 数据结构上机测试1:顺序表的应用
- 数据结构_静态链表_哈夫曼
- 《 常见算法与数据结构》符号表ST(4)——二叉查找树删除 (附动画)
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构
- 《 常见算法与数据结构》符号表ST(3)——二叉查找树 (附动画)
- 数据结构之用栈实现逆波兰表达式
- 数据结构实验之链表九:双向链表
- java核心数据结构(一)——List类族
- 《 常见算法与数据结构》符号表ST(2)——初等实现分析和有序符号表
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构之链表
- 《 常见算法与数据结构》符号表ST(1)——基本介绍
- Redis 数据结构使用场景
- Java千百问_06数据结构(016)_引用类型数组在内存中如何储存
- 数据结构(c)——排序算法
- 开始批改数据结构作业啦
- Java千百问_06数据结构(015)_数组和普通对象的引用变量有什么区别
- Java千百问_06数据结构(014)_java数组如何存储在内存中