单向链表并交集问题
来源:互联网 发布:手机淘宝图片最佳尺寸 编辑:程序博客网 时间:2024/06/14 15:26
#include <stdio.h>#include <stdlib.h>typedef struct Element{ int val; struct Element *suivant;}Element;typedef struct List{ Element *tete;}List;typedef struct File //队列{ Element *front; Element *rear;}File; List *Initialize() { List *list = malloc(sizeof(List)); if(list != NULL){ list -> tete =NULL; //initialisation de la tele } return list; }void Insert(List * list, int element){ Element *new=malloc(sizeof(Element)); Element *p=list->tete; new->val=element; //insertion de la tete if(p==NULL||p->val>=element) { new->suivant=p; list->tete=new; } else { while(p->suivant&&p->suivant->val<element) p=p->suivant; new->suivant=p->suivant; p->suivant=new; }}void Display(List *list){ if(list&&list->tete){ Element *p=list->tete; while(p){ printf(" %d",p->val); p=p->suivant; } } else{ printf("cette liste est vide"); }} int isPresent(Element *head, int val) //判断是否存在{ Element *t = head; while(t != NULL) { if( t->val == val ) return 1; t = t->suivant; } return 0;} List *Intersect(List *list1, List *list2) { List* result=Initialize(); Element *p1=list1->tete; Element *p2=list2->tete; while(p1) { if(isPresent(p2,p1->val)) Insert(result,p1->val); p1=p1->suivant; } return result; }List *Union(List *list1, List *list2) { List* result=Initialize(); Element *p1=list1->tete; Element *p2=list2->tete; while(p1) { Insert(result,p1->val); p1=p1->suivant; } while(p2) { if(!isPresent(result->tete,p2->val)) Insert(result,p2->val); p2=p2->suivant; } return result; } File *Initialize_File() { File *file=malloc(sizeof(File)); file->front=NULL; file->rear=NULL; return file; }void Push(File * file, Element element){ Element *new=malloc(sizeof(Element)); new->val=element.val; new->suivant=NULL; if(file->front==NULL) { file->front=new; file->rear=new; } else { new->suivant=file->front; file->front=new; }} Element Pop(File *file) { Element *p1=file->front; Element *p2=file->rear; if(file->front==NULL) printf("vide"); else { while(p1->suivant!=p2) p1=p1->suivant; file->rear=p1; } return *p2; }File *ListToFile(List *list){ Element *p=list->tete; File *file=Initialize_File(); while(p) { Push(file, *p); p=p->suivant; } return file;}void Display_File(File *file){ Element *p=file->front; while(p) { printf("%d ",p->val); p=p->suivant; }} void Reverse(List * list) //遍历整个链表的同时,将正在访问的节点插入到链表头部。 { Element *p=list->tete; Element *q=p->suivant; while(p->suivant) { p->suivant=q->suivant; q->suivant=list->tete; list->tete=q; q=p->suivant; } }int main(){ List *list1=Initialize(); List *list2=Initialize(); printf("list1:"); Insert(list1,2); Insert(list1,4); Insert(list1,6); Insert(list1,5); Insert(list1,11); Display(list1); printf("\nlist2:"); Insert(list2,2); Insert(list2,3); Insert(list2,5); Insert(list2,9); Display(list2); List *list3=Intersect(list1,list2); printf("\nIntersection:"); Display(list3); List *list4=Union(list1,list2); printf("\nUnion:"); Display(list4); printf("\nUse queue:"); File *file=ListToFile(list1); Display_File(file); printf("\nReverse_list2:"); Reverse(list4); Display(list4); return 0;}
阅读全文
0 0
- 单向链表并交集问题
- Josephu问题 单向链表
- 单向链表翻转问题
- 单向链表逆序问题
- 求两个链表的并集和交集
- 求两个链表的并集和交集
- Java——两个顺序链表的并交集
- 有序链表交集
- 两单向链表相交问题
- 单向链表反转的问题
- 约瑟夫问题(单向链表)
- 两单向链表相交问题
- 单向循环链表实现约瑟夫问题
- 调试单向链表遇到问题总结
- 单向循环链表实现约瑟环问题
- 单向链表的查找问题
- 单向循环链表—约瑟夫问题
- 单向链表结点删除问题
- Datawindow实现单双行显示不同颜色
- C++ 在类里面使用多线程技术
- html定义标签
- php 引入微信的js-sdk 报签名不合法的解决方案
- 栈的面试题总结
- 单向链表并交集问题
- 解决电脑没有语言输入法问题
- 考试排名(结构体的运用)
- html定义不同文件定义标签
- linux du
- 周笔记(20/52)
- Github全面详解-19课后作业04
- html中放大文件的一个方法
- Android信使Messenger解析