单链表实现递增有序交集
2016-09-29 13:36
316 查看
#include <stdio.h>
#include <stdlib.h>
#define OK 1
typedef int status;
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}LNode,*LinkList;
void creat(LinkList L);
void IntersectionList1(LinkList L);
void Insert(LinkList L,LinkList p);
status Sort(LinkList L);
//void Print(LinkList L);
int main() {
LinkList La;
La=(LinkList)malloc(sizeof(LNode));
La->next=NULL;
La->data=-1;
creat(La);
Sort(La);
printf("交集为:\n");
IntersectionList1(La);
printf("\n");
return 0;
}
//创建一个新的链表
void creat(LinkList L){
int n1,n2;
LinkList p,q;
p=L;
printf("请输入A集合元素的个数:\n");
scanf("%d",&n1);
printf("请输入A集合元素:\n");
while(n1--) {
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
getchar();
printf("请输入B集合元素的个数:\n");
scanf("%d",&n2);
printf("请输入B集合元素:\n");
while(n2--) {
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
}
//提取链表中的重复元素
void IntersectionList1(LinkList L)
{
LinkList p,q,s;
p=L;
q=L->next;
while(q->next)
{
if(q->data==q->next->data)
{
printf("%d ",q->data);
p->next=q->next;
s=q;
q=q->next;
free(s);
}
else
{
p=p->next;
q=q->next;
}
}
}
//升序排列
void Insert(LinkList L,LinkList p)
{
LinkList s;
s=L;
while(s->next && s->next->data < p->data)
s=s->next;
p->next=s->next;
s->next=p;
}
status Sort(LinkList L){
LinkList s,r;
s=L->next;
L->next=NULL;
while(s){
r=s;
s=s->next;
r->next=NULL;
Insert(L,r);
}
return OK;
}
/*void Print(LinkList L)
{
LinkList p;
p=L->next;
printf("交集为:\n");
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}*/
#include <stdlib.h>
#define OK 1
typedef int status;
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}LNode,*LinkList;
void creat(LinkList L);
void IntersectionList1(LinkList L);
void Insert(LinkList L,LinkList p);
status Sort(LinkList L);
//void Print(LinkList L);
int main() {
LinkList La;
La=(LinkList)malloc(sizeof(LNode));
La->next=NULL;
La->data=-1;
creat(La);
Sort(La);
printf("交集为:\n");
IntersectionList1(La);
printf("\n");
return 0;
}
//创建一个新的链表
void creat(LinkList L){
int n1,n2;
LinkList p,q;
p=L;
printf("请输入A集合元素的个数:\n");
scanf("%d",&n1);
printf("请输入A集合元素:\n");
while(n1--) {
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
getchar();
printf("请输入B集合元素的个数:\n");
scanf("%d",&n2);
printf("请输入B集合元素:\n");
while(n2--) {
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
}
//提取链表中的重复元素
void IntersectionList1(LinkList L)
{
LinkList p,q,s;
p=L;
q=L->next;
while(q->next)
{
if(q->data==q->next->data)
{
printf("%d ",q->data);
p->next=q->next;
s=q;
q=q->next;
free(s);
}
else
{
p=p->next;
q=q->next;
}
}
}
//升序排列
void Insert(LinkList L,LinkList p)
{
LinkList s;
s=L;
while(s->next && s->next->data < p->data)
s=s->next;
p->next=s->next;
s->next=p;
}
status Sort(LinkList L){
LinkList s,r;
s=L->next;
L->next=NULL;
while(s){
r=s;
s=s->next;
r->next=NULL;
Insert(L,r);
}
return OK;
}
/*void Print(LinkList L)
{
LinkList p;
p=L->next;
printf("交集为:\n");
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}*/
相关文章推荐
- 递增有序的顺序表表示集合,求解两个集合的交集 并集 差集(c语言实现)
- 数据结构题典010:有序单链表的交集(ANSI C)
- 求有序单链表表示集合的交集
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 合并有序单链表(递归实现)
- 单链表编写递增有序并集(c语言实现)
- 设A和B是两个单链表,其表中元素递增有序,使用一算法将A和B归并成一个案元素递减有序的单链表C(该程序中的功能包含了上几个博客中的部分功能)
- 实现单链表的排序(递增)
- 单链表操作之合并两个有序单链表---递归 and 非递归实现
- 随机化算法-用数组实现有序递增链表
- 有序单链表的插入 C语言实现
- 顺序表、单链表、循环单链表、循环双链表、有序单链表的排序的实现
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- PAT 2-12 两个有序链表序列的交集(C语言实现)
- 编程实现合并两个有序单链表
- C语言实现有序单链表的插入
- c实现按访问频度非递增有序的带头节点的双向链表检索关键字
- 在以单链表表示的正整数的有序集合上,实现集合的并、交和差运算