2.3线性表的链式表示和实现(静态链表)
来源:互联网 发布:世界国家城市数据库 编辑:程序博客网 时间:2024/06/08 09:42
样例输入
4 2
3 5 7 9
3 2
样例输出
find success!
5 7 9 2
实现的功能是:
将两个链表同时存在的元素删除
链表2存在而链表1不存在的元素插入到链表1中
查找给定位置的元素
————
自己想的样例 目的是为了更具体掌握该知识点
#include<stdio.h>#define MAXSIZE 1000 //链表的最长长度 #define ERROR 0;#define OK 1;typedef int ElemType;int m,n; //----线性表的静态单链表存储结构----- typedef struct{ ElemType data; int cur;}component,SLinkList[MAXSIZE];void InitSpace_SL() //算法2.14 {//将一维数组space中的各分量链成一个备用链表,space[0].cur为头指针 //'0'表示空指针 SLinkList space; int i; for(i = 0; i < MAXSIZE-1; i ++) { space[i].cur = i+1; } space[i].cur = 0;} int Malloc_SL() //算法2.15 {//若备用空间链表非空,则返回分配的结点下标,否则返回0 SLinkList space; int i; i = space[0].cur ; if(space[0].cur) { space[0].cur = space[i].cur ; } return i;}void Free_SL(int k) //算法2.16 {//将下标为k的空闲结点回收到备用链表 SLinkList space; space[k].cur = space[0].cur ; space[0].cur = k;}void print(int s,int r,SLinkList space){ int k = space[s].cur; while(space[r].cur != k) { printf("%d ",space[k].data ); k = space[k].cur ; } printf("\n");}int LocateElem_SL(int s,SLinkList space,int m)//算法2.13 {//在静态单链线性表中查找第一个值为e的元素 int p = space[s].cur ; while(p < m) { p = space[p].cur ; } if(p == m) { return OK; } else return ERROR;}void difference(int m,int n) {//依次输入集合A和集合B的元素,在一维数组space中建立表示集合//的静态链表,s为其头指针。假设备用空间足够大,space[0].cur为其头指针 SLinkList space; int s,r,k,d,i,j,p; InitSpace_SL();//初始化备用空间 s = Malloc_SL();//生成s头结点 r = s;//r指向s的当前最后结点 for( i = 1; i <= m; i ++)//建立集合A链表 { j = Malloc_SL();//分配结点 scanf("%d",&space[j].data );//输入A的元素值 space[r].cur = j;//插入到表尾 r = j; } space[r].cur = 0;//尾结点的指针为空 for( i = 1; i <= n; i ++) {//依次输入B的元素,若不在当前表中,则插入,否则删除 p = s; k = space[s].cur ;//k指向集合的第一个结点 scanf("%d",&d);//在当前表中查找 while(k != space[r].cur && space[k].data != d) { p = k; k = space[k].cur ; } if( k == space[r].cur ) {//当前表不存在该元素,插入在r所指的结点之后,且r位置不变 j = Malloc_SL(); space[j].data = d; space[j].cur = space[r].cur ; space[r].cur = j; r = j; } else {//该元素已在表中,删除之 space[p].cur = space[k].cur ; Free_SL(k); if(r == k) p = r; } } k = space[s].cur; if(LocateElem_SL(s,space,m)) printf("find success!\n"); print(s,r,space);}int main(){ while(scanf("%d%d",&m,&n)!=EOF) { difference(m,n); } return 0; }
阅读全文
0 0
- 2.3线性表的链式表示和实现(2)-静态链表(1)
- 2.3线性表的链式表示和实现(静态链表)
- 线性表的链式表示和实现(链式)
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 为什么推荐使用npm安装Vue,而不是直接在HTML中引入vue.js
- 红黑树-Java实现
- struts2+spring+hibernate集成框架的环境搭建
- 数据结构树汇总
- tcp wrapper
- 2.3线性表的链式表示和实现(静态链表)
- LeetCode OJ 279 Perfect Squares [Medium]
- date的使用
- 车架号图像识别,车架号拍照识别,车架号扫描识别,车架号OCR识别
- NEUQ 1768 一道简单的递推题
- CentOS用yum安装、配置、升级、初始化5.5升级10.0MariaDB
- 6.6解题报告
- 顺序表 查找 插入 删除 操作
- 四十岁是科学家的黄金年龄 我还有机会