数据结构(7)线性表之链表C++实现差集
2016-03-15 23:41
836 查看
题目
算法
算法的动态表示
算法具体实现
运行结果
算法
算法的动态表示
算法具体实现
运行结果
题目
已知单链线性表LALA和LBLB的元素按值非递减排列,假设利用两个线性表LALA和LBLB分别表示两个集合AA和BB(即线性表中的数据元素即为集合中的成员,现要求一个新的计划A=A−BA=A-B )。算法
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 0 typedef 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_L Status 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_L Status 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; }
运行结果
相关文章推荐
- 活用 巧用数据结构
- 数据结构(6)线性表之链表C++实现交集
- java数据结构与算法分析之递归
- 数据结构--线性表复习
- 复杂数据结构(二)树
- 数据结构(个人学习)
- 数据结构(2):线性表的链式表示和实现
- 数据结构(1):线性表的顺序表示和实现
- 第三周周赛——基础数据结构结业场(坚持就会有AK,题目出自codeforces 633C,633D,631B,651A,651C以及poj1577)
- Python之数据结构篇
- Tsinghua OJ 数据结构编程作业:祖玛(Zuma)
- 数据结构与算法面试题80道(37)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- java 数据结构
- FFmpeg数据结构
- MySQL索引背后的数据结构及算法原理
- 数据结构与算法面试题80道(36)
- 数据结构,传值
- 数据结构(RMQ):UVAoj 11235 Frequent values
- 可视化的数据结构 - 各种算法动画演示