1、本代码实现与王道和严蔚敏老师的教材基本保持一致。此代码主要用于考研用,为简化代码,顺序表并没有像严蔚敏老师的教材上那样使用动态分配。
2、注意本代码中元素的位置i=(元素的下标+1)。即线性表中元素的位置是从1开始的,而数组中元素的下标是从0开始的。
所以插入位置的范围是(1=<i<=L.length+1),删除位置的范围是(1<=i<=L.length)。 (插入位置一般是在指定位置之前。)
(根据王道单科)
假设元素个数为n个:
在任意位置插入元素的概率为1/(n+1) | 在任意位置删除元素的概率为1/n
在i位置插入元素需移动(n-i+1)个元素 | 在i位置删除元素需移动(n-i)个元素
在任意位置插入元素的概率为1/(n+1) | 在任意位置删除元素的概率为1/n
有些看了天勤数据结构的同学可能会疑问,为什么天勤里面写的却是
在任意位置插入元素的概率为1/(n+1) | 在任意位置删除元素的概率为1/n
在i位置插入元素需移动(n-i)个元素 | 在i位置删除元素需移动(n-i-1)个元素
在任意位置插入元素的概率为1/(n+1) | 在任意位置删除元素的概率为1/n
这是因为天勤的书他的元素位置i也是从0开始的,因此它的元素的位置i=元素的下标。他的书其实很多地方都简化了代码。比如说没有再写ElemType,而是直接写int类型等等。
好了,让我们看看代码吧。
本代码实现函数有:
void InitList(Sqlist &L)
bool ListInsert(Sqlist &L,int i,ElemType e)
bool ListDelete(Sqlist &L,int i,ElemType &e)
bool getElem(Sqlist L,int i,ElemType &e)
int LocateElem(Sqlist L,ElemType e) void ListLoad(Sqlist L)
#include#define true 1#define false 0#define MaxSize 100 #define ElemType int#define Status int typedef struct{ ElemType data[MaxSize]; int length; }Sqlist;//构造一个空的线性表L void InitList(Sqlist &L){ L.length=0;}bool ListInsert(Sqlist &L,int i,ElemType e){ //将元素e插到顺序表L中第i个位置 if(i<1||i>L.length+1) return false; if(L.length>=MaxSize) return false; for(int j=L.length;j>=i;j--) L.data[j]=L.data[j-1]; L.data[i-1]=e; L.length++; return true;}bool ListDelete(Sqlist &L,int i,ElemType &e){//删除L中第i个位置的元素 if(i<1||i>L.length) return false; e=L.data[i-1]; for(int j=i;j L.length)return false; e=L.data[i-1]; return true; } //返回L中第一个元素值等于e的位置 int LocateElem(Sqlist L,ElemType e){ int i; for(i=0;i
插入元素ListInsert:
删除元素(ListDelete):
查找指定元素的位置(LocateElem)