8---------单链表算法的简单应用和巩固
来源:互联网 发布:在日韩国人 知乎 编辑:程序博客网 时间:2024/06/04 01:05
单链表算法主要注意处理好指针的指向问题
链表的逆置
两个链表的交集合问题(链表初始无序)
两个链表的并集问题(链表初始无序)
链表A-链表B差集问题(链表初始无序)
找到单链表倒数第k个结点并打印
#include <stdio.h>#include <stdlib.h>/**带头结点的单链表* 链表的逆置* 两个链表的交集合问题(链表初始无序)* 两个链表的并集问题(链表初始无序)* 链表A-链表B差集问题(链表初始无序)* 找到单链表倒数第k个结点并打印*///链表结点结构体定义typedef struct Node{ int data; struct Node * next;}Node;//链表的逆置void inverse(Node * node){ Node * q,* p; q = node -> next; while(q){ p = q->next; q->next = node->next; node -> next = q; q = p; }}//链表的交集合问题,AnB=C,不破坏原本A和B链表结构void itersection(Node * A,Node * B,Node * C){ Node * q = A->next; Node * p = B->next; Node * c = C; //c本身是带头结点的单链表 Node * s; while(q){ while(p){ if(p->data == q->data){ s = (Node *)malloc(sizeof(Node)); s -> data = q->data; s -> next = NULL; c ->next = s; c = c->next; } p = p->next; } q = q->next; }}//两个链表的并集问题,AuB = C,思路,先将一个链表的所有数据线存到C,然后再B链表中的结点一一于C中的结点比较,如果有相同的就不加入void combine(Node * A,Node * B,Node * C){ Node * q = A->next; Node * p = B->next; Node * justc; Node * c = C; //C本身是带头结点 Node * s; int flag = 0; while(q){ flag = 0; justc = C->next; while(justc){ //重复的就不加入到该C链表中 if(q->data == justc ->data){ flag = 1; justc = justc ->next; } } if(!flag){ s = (Node *)malloc(sizeof(Node)); s ->data = q->data; s->next = NULL; c -> next = s; c = c->next; } q = q->next; } while(p){ flag = 0; justc = C->next; while(justc){ if(c->data == p->data){ flag = 1; } } if(!flag){ s = (Node *)malloc(sizeof(Node)); s -> data = p->data; s -> next = NULL; c-> next = s; c = c->next; } p = p->next; }}//计算A-B = Cvoid cut(Node * A,Node * B,Node * C){ Node * p = A->next; Node * q = B->next; Node * c = C; Node * s; int flag; while(p){ flag = 0; while(q){ if(q -> data == p -> data){ flag = 1; } q = q->next; } if(!flag){ s = (Node *)malloc(sizeof(Node)); s -> data = p -> data; s -> next = NULL; c -> next = s; c = c->next; } p = p->next; }}//找到单链表倒数第k个结点并打印,可以开始计数,当记时到链表的n个位置的时候,就让一个指针指向初始位置的结点,然后后移struct Node * getInverseV(Node * node,int v){ Node * p = node -> next; Node * q = NULL; int n = 0; while(p){ n++; if(v == n){ q = node -> next; }else if(n > v){ q = p -> next; } p = p->next; } return q;}int main(){ return 0;}
阅读全文
0 0
- 8---------单链表算法的简单应用和巩固
- 知识的积累和巩固
- [java]一个简单的程序巩固基本概念
- 要巩固学习的算法总结
- 递归算法的简单应用
- 分治算法的简单应用
- 计划要学习和巩固的
- [Java基础巩固](0) --- 程序设计基础和基本数据结构, 算法
- 【C】单链表的简单实现和应用!!!
- 巩固C语言(七)----递归的深度学习及应用 & 字符串和整数之间的相互转化
- 学理论,是需要通过应用来巩固的
- java基础巩固系列(四):数组的反射应用
- 简单计算器(switch语句的巩固练习)
- 巩固基础篇:算法复杂度的分析方法及其运用
- Q_Learning算法的一个简单的应用。
- 泛型算法的简单应用
- C++容器排序算法的简单应用
- 哈希算法的又一简单应用
- LeetCode 第1题 Two sum (easy)——python
- 实时库接口
- 使用 IntelliJ IDEA打包Spark应用程序
- redis爬坑记(三) java操作redis
- 代码规范 : 自解释的神话
- 8---------单链表算法的简单应用和巩固
- Spring xml配置文件头解析
- CGContextRef详解
- python 实现switch
- jhipster入门疑问之路二
- linux usb驱动中的urb详解
- PHP常见的设计模式之:工厂模式
- Python入门之Python安装
- Java常用命令及Java Dump