数据结构(7)线性表之链表C++实现差集
来源:互联网 发布:上海淘车网络骗局 编辑:程序博客网 时间:2024/05/21 06:43
- 题目
- 算法
- 算法的动态表示
- 算法具体实现
- 运行结果
题目
已知单链线性表
算法
void SubList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ pa=La->next;pb=Lb->next; Lc=pc=La;//用La的头结点作为Lc的头结点 while(pa && pb) { if(pa->data == pb->data) { pc->next = pa->next; free(pa); pa=pc->next; } else if(pa->data < pb ->data) { pc=pa; pa=pa->next; } else pb=pb->next; } pb=Lb; while(pb) { pc=pb; pb=pb->next; free(pc); }}//SubList_L
算法的动态表示
算法具体实现
//所有定义#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -2#define TRUE 1#define FALSE 0typedef int Status;//为了方便算法可用性,算法的Status可以通过这里可改typedef char ElemType;//为了输出的可用性,数据的ElemType可以通过这里更改struct LNode{ ElemType data; struct LNode *next;};typedef struct LNode *LinkList; /* 另一种定义LinkList的方法 *///包含的头文件#include <iostream>using namespace std;Status InitList(LinkList *L){ /* 操作结果:构造一个空的线性表L */ *L = (LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点 */ if (!*L) /* 存储分配失败 */ exit(OVERFLOW); (*L)->next = NULL; /* 指针域为空 */ return OK;}void SubList_L(LinkList &La, LinkList &Lb, LinkList &Lc){ LinkList pa, pb, pc; pa = La->next; pb = Lb->next; Lc = pc = La;//用La的头结点作为Lc的头结点 while (pa && pb) { if (pa->data == pb->data) { pc->next = pa->next; free(pa); pa = pc->next; } else if (pa->data < pb->data) { pc = pa; pa = pa->next; } else pb = pb->next; } pb = Lb; while (pb) { pc = pb; pb = pb->next; free(pc); }}//SubList_LStatus ListInsert_L(LinkList &L, int i, ElemType e) { // 算法2.9 // 在带头结点的单链线性表L的第i个元素之前插入元素e LinkList p, s; p = L; int j = 0; while (p && j < i - 1) { // 寻找第i-1个结点 p = p->next; ++j; } if (!p || j > i - 1) return ERROR; // i小于1或者大于表长 s = (LinkList)malloc(sizeof(LNode)); // 生成新结点 s->data = e; s->next = p->next; // 插入L中 p->next = s; return OK;} // LinstInsert_LStatus ListTraverse(LinkList L, void(*vi)(LinkList&)){ /* 初始条件:顺序线性表L已存在 */ /* 操作结果:依次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败 */ LinkList p = L->next; cout << " "; while (p != NULL) { vi(p); p = p->next; } return OK;}void visit(LinkList &node){ cout << node->data << " ";}int main(){ //创建三个表 LinkList A, B, C; //本程序说明,是在VS2013中运行的,若是其他地方无法运行,建议修改代码 //程序声明 cout << "***************************************************************************" << endl; cout << " 《数据结构》<C语言版本>严蔚敏 吴伟名 编著 " << endl; cout << " 编写年月2016年3月 " << endl; cout << " 编写者:YuYunTan " << endl; cout << " 链表差集 " << endl; cout << "***************************************************************************" << endl; //表的初始化,即每一个表都能有一个头结点,方便进行指向使用 //状态判断 InitList(&A); InitList(&B); ListInsert_L(A, 1, 'A'); ListInsert_L(A, 2, 'B'); ListInsert_L(A, 3, 'C'); ListInsert_L(A, 4, 'X'); ListInsert_L(A, 5, 'Y'); ListInsert_L(A, 6, 'Z'); cout << "List A = <"; ListTraverse(A, visit); cout << ">" << endl; ListInsert_L(B, 1, 'B'); ListInsert_L(B, 2, 'C'); ListInsert_L(B, 3, 'G'); ListInsert_L(B, 4, 'K'); cout << "List B = <"; ListTraverse(B, visit); cout << ">" << endl; cout << "SubList_L(A,B);" << endl; SubList_L(A, B, C); cout << "List C = <"; ListTraverse(C, visit); cout << ">" << endl; system("pause"); return 0;}
运行结果
1 0
- 数据结构(7)线性表之链表C++实现差集
- 数据结构(线性表子系统:c实现)
- 数据结构--线性表C实现
- 数据结构之线性表(C语言版)
- 数据结构之线性表(C#)
- 数据结构之线性表(数组实现)
- 数据结构之线性表实现
- 【数据结构】数据结构C语言的实现(线性表)
- 数据结构之---c语言实现线性表的顺序表
- 数据结构C语言之线性表简单实现
- 数据结构c语言实现之顺序线性表
- 线性表数据结构C语言实现
- 数据结构_1:线性表: C语言实现
- C - 数据结构 - 线性表 - 链式实现
- 【C语言 数据结构】 简单线性表实现
- C语言实现数据结构--线性表
- C语言数据结构-线性表-双链表实现
- 数据结构用c实现线性表子系统
- source insight配置(自动排版,多标签显示,注释,删除中文乱码)
- centos7编译替换内核
- java7新特性之Improved exception handling
- (二)分布式微信公众平台框架--接收粉丝发来的信息并回复
- 程序员学习之路
- 数据结构(7)线性表之链表C++实现差集
- Latent dirichlet allocation note
- java基础(二)之数据类型
- 活用 巧用数据结构
- 部署Maven项目无法找到Maven管理的Jar包
- 选择排序和冒泡排序(JAVA)
- 购买阿里云服务器到服务器环境搭建(CentOS7.0:jdk+mysql+tomcat)
- OpenGL碰撞检测与模型运动
- 基于PHP的日历程序