22线性表的顺序存储结构 22.1线性表的顺序存储结构 线性表的顺序存储结构是指用一组连续的存储单 元依次存储线性表中的每个数据元素。如下图2-1所 西顺大学教学与信息学院
2.2 㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘ 2.2.1 㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘ 㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘᰃᣛ⫼ϔ㒘䖲㓁ⱘᄬټऩ ܗձᄬټ㒓ᗻ㸼Ёⱘ↣Ͼ᭄ܗ㋴DŽབϟ2-1᠔ ⼎˖
存储地址内存单元 d+L d+2L aaa d+(-)L d+(n-1)L a 图2-1线性表顺序存储结构示意图 西顺大学教学与信息学院
ܗᄬऩݙ ഔഄټᄬ ... d a1 d+L a2 d+2L a3 ... d+(i-1)L a i ... d+(n-1)L a n ... ... 2-1 㒓ᗻ㸼乎ᑣᄬټ㒧ᵘ⼎ᛣ
其中,L为每个数据元素所占据的存储单元数目。 相邻两个数据元素的存储位置计算公式 LOC(a+1=LoC(ai +L 线性表中任意一个数据元素的存储位置的计算公 式为: LOC(a+=LoC(a+(i-1)L 顺序存储结构的特点 (1)利用数据元素的存储位置表示线性表中相邻 数据元素之间的前后关系,即线性表的逻辑结构与存 储结构(物理结构)一致; 西顺大学教学与信息学院
݊ЁˈLЎ↣Ͼ᭄ܗ㋴᠔ऴⱘᄬټऩܗ᭄ⳂDŽ Ⳍ䚏ϸϾ᭄ܗ㋴ⱘᄬټԡ㕂䅵ㅫ݀ᓣ LOC(ai+1)=LOC(ai )+L 㒓ᗻ㸼ЁӏᛣϔϾ᭄ܗ㋴ⱘᄬټԡ㕂ⱘ䅵ㅫ݀ ᓣЎ˖ LOC(ai+1)=LOC(a1 )+(i-1)*L 乎ᑣᄬټ㒧ᵘⱘ⡍⚍ ˄1˅߽⫼᭄ܗ㋴ⱘᄬټԡ㕂㸼⼎㒓ᗻ㸼ЁⳌ䚏 ᭄ܗ㋴П䯈ⱘࠡৢ݇㋏ˈे㒓ᗻ㸼ⱘ䘏䕥㒧ᵘϢᄬ ټ㒧ᵘ˄⠽⧚㒧ᵘ˅ϔ㟈˗
(2)在访问线性表时,可以利用上述给出的数学 公式,快速地计算出任何一个数据元素的存储地址。 因此,我们可以粗略地认为,访问每个数据元素所花 费的时间相等。这种存取元素的方法被称为随机存取 法,使用这种存取方法的存储结构被称为随机存储结 构。 在C语言中,实现线性表的顺序存储结构的类型定 义 # define lIst maX length100线性表的 最大长度 typedef struct 素的[ryye+iem;指向存放线性表中数据元 Entr int length;线性表的当前长度 JSQ LIST 西顺大学教学与信息学院
˄2˅䆓䯂㒓ᗻ㸼ᯊˈৃҹ߽⫼Ϟ䗄㒭ߎⱘ᭄ᄺ ݀ᓣˈᖿ䗳ഄ䅵ㅫߎӏԩϔϾ᭄ܗ㋴ⱘᄬټഄഔDŽ ℸˈ៥Ӏৃҹ㉫⬹ഄ䅸Ўˈ䆓䯂↣Ͼ᭄ܗ㋴᠔㢅 䌍ⱘᯊ䯈ⳌㄝDŽ䖭⾡ᄬপܗ㋴ⱘᮍ⊩㹿⿄Ў䱣ᴎᄬপ ⊩ˈՓ⫼䖭⾡ᄬপᮍ⊩ⱘᄬټ㒧ᵘ㹿⿄Ў䱣ᴎᄬټ㒧 ᵘDŽ C䇁㿔Ёˈᅲ⦄㒓ᗻ㸼ⱘ乎ᑣᄬټ㒧ᵘⱘ㉏ൟᅮ Н #define LIST_MAX_LENGTH 100 //㒓ᗻ㸼ⱘ ᳔䭓ᑺ typedef struct { EntryType *item; //ᣛᄬᬒ㒓ᗻ㸼Ё᭄ܗ ㋴ⱘഄഔ int length; //㒓ᗻ㸼ⱘᔧࠡ䭓ᑺ }SQ_LIST˗
222典型操作的算法实现 1.初始化线性表L int InitList(SQ LIST L) L->item= Entry Type )malloc(LIST MAX LENGtH *sizeof(Entry Type);∥分配空间 if(L->item=NULI) return Error;∥若分配空间不 成功,返回 ERROR L->length=0; ∥将当前线性表长度置0 return OK ∥成功返回OK 西顺大学教学与信息学院
2.2.2 ൟ᪡ⱘㅫ⊩ᅲ⦄ 1. ߱ྟ࣪㒓ᗻ㸼L int InitList(SQ_LIST *L) { L->item=(EntryType*)malloc(LIST_MAX_LENGTH *sizeof(EntryType)); //ߚ䜡ぎ䯈 if (L->item==NULL) return ERROR; //㢹ߚ䜡ぎ䯈ϡ ៤ࡳˈ䖨ಲERROR L->length=0; //ᇚᔧࠡ㒓ᗻ㸼䭓ᑺ㕂0 return OK; //៤ࡳ䖨ಲOK }