线性表的顺序存储
2015-09-24 19:24
441 查看
线性表是n个类型相同数据元素的有限序列,对n>0,除第一个元素无直接前驱,最后一个元素没有直接后继外,其他都是每个元素有一个直接前驱和直接后继,而且是一对一的关系。
线性表:顺序存储,链式存储。
(1) 按内容查找:
将原表中位置n,n-1...i..上的结点,依次后移到位置n+1,n,n-1...i...的位置。空出i的位置,将元素e插入。
将原表中位置i+1,i+2..n上的结点,依次前移到位置i,i+1...n的位置,将元素e删除。
线性表:顺序存储,链式存储。
(1) 按内容查找:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define ElemType int #define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/ typedef struct { ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList; int Locate(SeqList L, ElemType e) { int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/ while ((i<=L.last)&&(L.elem[i]!=e)) /*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/ i++; if (i<=L.last) return(i+1); /*若找到值为e的元素,则返回其序号*/ else return(-1); /*若没找到,则返回空序号*/ } void main() { SeqList l; int p,q,r; int i; printf("请输入线性表的长度:"); scanf("%d",&r); l.last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; i<=l.last; i++) { scanf("%d",&l.elem[i]); } printf("请输入要查找的元素值:\n"); scanf("%d",&q); p=Locate(l,q); if(p == -1) printf("在此线性表中没有该元素!\n"); else printf("该元素在线性表中的位置为:%d\n",p); }(2)插入操作:
将原表中位置n,n-1...i..上的结点,依次后移到位置n+1,n,n-1...i...的位置。空出i的位置,将元素e插入。
#define OK 1 #define ERROR 0 int InsList(SeqList *L,ElenType e) { int k; if((i<1)||(i>L->Last+2)) { printf("不合法!\n"); return (ERROR); } if(L->Last>=MAXSIZE-1) { printf("表满!\n"); return (ERROR); } for(k=L->Last;k>=i-1;k--) { L->elem[k+1]=L->elem[k];//后一一个位置 L->elem[i-1]=e;//将e插入 L->last++; return(Ok); } }(3)删除操作:
将原表中位置i+1,i+2..n上的结点,依次前移到位置i,i+1...n的位置,将元素e删除。
int DellList(SeqList *L,int i,ElemType *e) { int k; if(i<1|| i>L->last+1) { printf("错误!\n"); return(ERROR); } *e=L->elem[i-1]; for(k=i;i<=L->last;k++) L->elem[k-1]=L->elem[k]; L->last--; return (OK); }
相关文章推荐
- 偏最小二乘回归(PLSR)算法原理
- android 的wifi设置
- Android的事件传递(仿下拉刷新)
- 第一章附录
- 蓝懿iOS培训日志19 SearchBarController
- LightOJ 1422 Halloween Costumes(记忆化搜索)
- 初探GlusterFS-测试卷的类型
- 图像中涉及的基本概念
- AndroidService 深度分析(2)
- Borg Maze poj 3026(bfs+最小生成树)
- css3的3D transform变换
- hdu1115
- 第九周第四天
- hdu1115
- C++学习记录之list容器
- VS2005 调试不能设置断点的解决办法
- swift语言基础之:subscript下标、对象之间的循环强引用的处理方法
- 大视野 1588 Splay入门
- POJ 1651 Multiplication PuzzleDP方法:
- Android 自定义View修炼-高仿猎豹清理大师自定义内存开口圆环比例进度View