线性表的顺序表示和实现
2015-10-19 20:21
176 查看
线性表的顺序表示指的是用一组地址连续的存储单元存储线性表的数据元素。
假设线性表的每个元素需占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系:
LOC(ai+1)=LOC(ai)+l
一般来说,线性表的第i个数据元素ai的存储位置为
LOC(ai)=LOC(a1)+(i-1)×l
式中LOC(a1)是线性表的第一个数据元素a1的存储位置,通常叫做线性表的起始位置或基地址。
线性表的这种机内表示称作线性表的顺序存储结构或顺序映像,通常称这种存储结构的线性表为顺序表。
------------------线性表的动态分配顺序存储结构------------------
------------------结果预览------------------
假设线性表的每个元素需占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系:
LOC(ai+1)=LOC(ai)+l
一般来说,线性表的第i个数据元素ai的存储位置为
LOC(ai)=LOC(a1)+(i-1)×l
式中LOC(a1)是线性表的第一个数据元素a1的存储位置,通常叫做线性表的起始位置或基地址。
线性表的这种机内表示称作线性表的顺序存储结构或顺序映像,通常称这种存储结构的线性表为顺序表。
------------------线性表的动态分配顺序存储结构------------------
#include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct{ int *elem; int length; int listsize; }SqList;//构造一个空的线性表L int InitList_Sq(SqList &L){ L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L.elem) exit(OVERFLOW); //存储分配失败 L.length=0; //空表长度为零 L.listsize=LIST_INIT_SIZE; //初始存储容量 return OK; } //在顺序表L的第i个位置前插入新的元素e int ListInsert_Sq(SqList &L,int i,int e){ //i的合法值为1≤i≤ListLength_Sq(L)+1 if(i<1||i>L.length+1) return ERROR; if(L.length>=L.listsize){ int *newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) exit(OVERFLOW); //存储分配失败 L.elem=newbase; //新基址 L.listsize+=LISTINCREMENT; //增加存储容量 } int *p,*q; q=&(L.elem[i-1]); //q为插入位置 for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; //插入位置及之后的元素右移一位 *q=e; //插入e ++L.length; //表长加1 return OK; } //在线性顺序表L中删除第i个元素,并用e返回其值 int ListDelete_Sq(SqList &L,int i,int &e){ //i的合法值为1≤i≤ListLength_Sq(L) if((i<1)||i>L.length) return ERROR; int *p,*q; p=&(L.elem[i-1]); //p为被删除元素的位置 e=*p; //被删除的元素的值赋给e q=L.elem+L.length-1; //表尾元素的位置 for(++p;p<=q;++p) *(p-1)=*p; //被删除的元素之后的元速左移一位 --L.length; //表长减1 return OK; } //遍历顺序线性表L int ListTraverse(SqList L){ int i; for(i=0;i
------------------结果预览------------------
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- C语言实现顺序表基本操作汇总
- 数据结构之Treap详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字
- Java数据结构之简单链表的定义与实现方法示例
- 数据结构之AVL树详解
- c语言实现顺序表的基本操作