线性表之顺序表Word文档格式.docx
- 文档编号:2986343
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:38
- 大小:24.41KB
线性表之顺序表Word文档格式.docx
《线性表之顺序表Word文档格式.docx》由会员分享,可在线阅读,更多相关《线性表之顺序表Word文档格式.docx(38页珍藏版)》请在冰点文库上搜索。
顺序表的插入元素操作:
在顺序表L中第i个数据元素之前插入一个元素x
样例输入:
7302160251796277-1
275
样例输出:
7302160251796277
730216027251796277
//不用下标为0的空间,下标从1开始,使得表中元素位置一致!
//此时就是造成了存储空间的浪费!
#include<
stdio.h>
#defineMaxSize100
#defineElemTypeint
typedefstruct{
ElemTypedata[MaxSize];
}SeqList;
voidinit(SeqList*L)
{
intx,i=1,k=0;
scanf("
%d"
&
x);
while(x!
=-1){
L->
data[i++]=x;
length=++k;
}
}
/*
把参数设计成指向线性表的指针后,在调用时传给形参的就是
指向线性表的指针即线性表的地址,再被调函数中,可以通过
这个地址直接对地址中存储的线性表的各项的值进行修改。
在主调函数中访问线性表时仍然对相同的地址空间进行访问,
当然这样的修改就可以反映到主调函数中了!
*/
voidinsert(SeqList*L,ElemTypex,inti)
{//在顺序表L中第i个数据元素之前插入一个元素x
intk;
if((i<
1)||(i>
length+1)){
printf("
PositionError!
\n"
);
//非法位置
return;
if(L->
length>
=MaxSize){
Overflow!
//表空间溢出
for(k=L->
length;
k>
=i;
k--)//为插入元素,向后移动元素
data[k+1]=L->
data[k];
///注意区别
data[i]=x;
///
length++;
//表长加1
intmain()
SeqListL;
init(&
L);
//初始化
inty,i;
for(intj=1;
j<
=L.length;
j++)
%d"
L.data[j]);
%d%d"
&
y,&
i);
insert(&
L,y,i);
return0;
//下标从0开始,
由于表中元素位置比相应数组下标大1,处理的很不自然!
intx,i=0;
length=i;
length+1))
=MaxSize)
length-1;
=i-1;
data[i-1]=x;
//初始化
for(intj=0;
L.length;
以上是两套代码:
区别就是在于第一个代码是下标从1开始的,第二个代码下标从0开始!
其他无差别!
---------------------------------------------------------------------------------------------------------------------------
二,数据元素的删除:
顺序表中删除元素的过程:
在顺序表中删除第i个数据元素
730216027251796277-1
6
7302160271796277
///不用下标为0的空间,下标从1开始,使得表中元素位置一致!
intdata[100];
intx,i=1,k=0;
voidDeleList(SeqList*L,inti)
{//在顺序表L中删除第i个数据元素
length)){
for(k=i;
k<
=L->
k++)
data[k]=L->
data[k+1];
///元素前移,注意区别
length--;
//表长减1
voidPrint(SeqListL){
intfirst=1;
for(inti=1;
i<
i++)
if(first){
L.data[i]);
first=0;
}else{
%d"
Print(L);
inti;
DeleList(&
L,i);
///下标从0开始,
//由于表中元素位置比相应数组下标大1,处理的很不自然!
for(k=i;
k++)//
data[k-1]=L->
//元素前移,注意区别
for(inti=0;
i++)
三,数据元素的查找:
顺序表中数据元素的查找过程:
在顺序表中查找值为x的数据元素。
算法思想:
将顺序表中的数据元素依次与x比较,若某次比较相等,则返回数据元素的下标,运算结束;
否则继续比较!
若均不相等,则说明在该顺序表中不存在值为x的数据元素,返回-1.
25
----------------------------------------------------------------
实现了查找到元素并删除的目的!
///此时就是造成了存储空间的浪费!
intdata[MaxSize];
data[++i]=x;
intLocate(SeqListL,intx){
if(L.data[i]==x)
returni;
return-1;
//
intmain(){
intx,i;
i=Locate(L,x);
if(i==-1)
%d\n"
i);
else
///找到即删除
下标从0开始,
voidDeleList(SeqList*L,inti){//在顺序表L中删除第i个数据元素
k++)//-----------
//--------
//初始化----------
if(i==-1)//找到即删除------
L,i+1);
四,对递增有序顺序表的插入:
顺序表L中的元素递增有序,将数据元素x插入到顺序表L的适当位置上,以保持该顺序表的有序性!
算法思想:
先找到适当的位置,然后后移元素空出一个位置,再将x插入,并把顺序表的长度加1!
1223314556586575788991-1
61
1223314556586575788991
122331455658616575788991
不用下标为0的空间,下标从1开始,使得表中元素位置一致!
此时就是造成了存储空间的浪费!
voidinit(SeqList*L){
voidSLOrderInsert(SeqList*L,intx){
//顺序表L中从下标L.length至i+1的数据元素依次后移一个位置
for(i=L->
i>
=1&
&
x<
data[i];
i--)////主要在这:
x<
data[i]
data[i+1]=L->
////
data[i+1]=x;
intx;
SLOrderInsert(&
L,x);
以上就一套代码,下标从1开始,因为没有什么差别,--,不再赘述!
--------------------------------------------------------------------------------------------------------------------------
五,数据元素为x的删除
把顺序表L中所有值为x的数据元素全部删除!
对顺序表中所有数据元素从头到尾进行扫描,凡是与指定的值x相同的数据元素就删除!
123412561278121254-1
12
123412561278121254
34567854
voidDeleList(SeqList*L,inti){//在顺序表L中删除第i个数据元素
//printf("
k++)//
//元素前移!
voidMdeleteList(SeqList*L,intx){////调用删除函数来按个删除
inti,j;
for(i=0;
i++){
data[i]==x){////
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 顺序