一、顺序表的简介
定义:把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元中
顺序表也成为向量
- 向量:V
- 向量V的第i个分量:V(i)
- 含有n个数据元素:V[n]
顺序表是一种随机存储结构
元素存储地址的计算方法:
LOC(ai)=LOC(a1)+(i-1)*d ,d为每个数据元素占用的存储单元
二、顺序表的描述和基本功能的实现
#include "stdafx.h" //顺序表描述 #define ListSize 100 //容量100 typedef int DataType;//规定DataType为int typedef struct { DataType data[ListSize];//数组data存放表结点 int length;//当前表的长度 }SeqList; //顺序表的初始化 void InitList(SeqList *L) { //将当前表的长度设为0 L->length=0; } //获取当前表的长度 int LengthList(SeqList *L) { //返回顺序表的表长 return L->length; } //取表元 DataType GetList(SeqList *L,int i) { //放回顺序表的第i个结点的值:L->data[i-1] return L->data[i-1]; } //插入结点 int InsertList(SeqList *L,DataType t,int i)//L:要插入的表,t:插入的数值,i:插入的位置 { //将结点t插入到顺序表L的第i个结点的位置上 int j; //判断插入的位置 if(i<1||i>L->length+1) { puts("插入位置错误"); return 0; } //判断表是否满容量 if(L->length>=ListSize) { puts("表满不能插入"); return 0; } //满足上面的条件后便可进行插入 for(j=L->length-1;j>=i-1;j--) { L->data[j+1]=L->data[j];//结点一次后移,留出一个插入的位置 } L->data[i-1]=t;//插入结点 L->length++;//表长+1 return 1; } //删除结点 int DeleteList(SeqList *L,int i) { //从顺序表L中删除第i个结点 int j; if(i<1||i>L->length) { puts("删除位置错误"); return 0; } if(L->length==0) { puts("空表不能删除"); return 0; } for(j=i;j<=L->length-1;j++) { L->data[j-1]=L->data[j];//从前往后向前移动一位 } L->data[L->length-1]=0;//将原先的最后一个数清零 L->length--;//表长-1 return 1; } //按数值查找 int LocateList(SeqList *L,DataType t) { //丛顺序表L中查找数值为t的结点,找到返回位置i,否则返回-1 int i=1; while(i<L->length&&L->data[i-1]!=t) i++; if(L->data[i-1]==t) return i; else return -1; } int _tmain(int argc, _TCHAR* argv[]) { SeqList T={{12,35,5,25,17,49},{6}}; LengthList(&T); GetList(&T,2); InsertList(&T,999,2); DeleteList(&T,2); LocateList(&T,17); return 0; }
经调试,所得的结果正确。