以下为《第二周 数据结构学习》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
数据结构——线性表
线性表的基本操作:
InitList(&L) : 初始化表。构造一个空的线性表。
Length( L ) : 求表长。返回线性表 L 的长度,即 L 中数据元素的个数。
LocateElem( L , e ) : 按值查找操作。在表 L 中 查找具有给定关键字值的元素。
GetElem( L , i ) : 按位查找操作。获取表 L 中第 i 个位置的元素的值
ListInsert( &L , i , e ) :插入操作。在表 L 中的第 i 个位置插入指定元素 e
ListDelete( &L , i , &e) : 删除操作。删除表 L 中第 i 个位置的元素,并用 e 返回删除元素的值。
PrintList( L ) : 输出操作。按前后顺序输出线性表 L 的所有元素的值。
Empty( L ) : 判空操作。若 L 为空表,则返回 true ,否则返回 false 。
DestroyList( &L ) : 销毁操作。销毁线性表,并释放线性表 L 所占用的内存空间。
一.线性表的顺序存储结构,指的是用一段地址连续的存储单元依此存储线性表中的数据元素。
/
typedef struct LNode *List;struct LNode{ElementType Data[MAXSIZE];int Last;};struct LNode L;List PtrL;
【插入功能实现】
检查目标位置是否合法
检查是否有剩余存储空间可供插入
将目标位置处元素及目标位置之后的所有元素后移一个位置
将新元素插入目标位置
线性表长度加1
void Insert(ElementType X,int i,List PtrL)//插入
{
int j;
if(PtrL->Last==MAXSIZE-1){//表空间已满,不能插入
printf("表满");
return;
}
if(iPtrL->Last+2){//检查插入位置的合法性
printf("位置不合法");
return;
}
for(j=PtrL->Last;j>=i-1;j--)
PtrL->Data[j+1]=PtrL->Data[j];//将ai~an倒序向后移动
PtrL->Data[I-1]=X;//新元素插入
PtrL->Last++;//Last仍指向最后元素
return;
} //平均比较次数为n/2,平均时间性能为O(n).
【删除功能实现】
检查目标位置是否合法
将目标位置之后的所有元素前移一个位置
线性表长度减一
void Delete(int i,List PtrL)//删除
{
int j;
if(iPtrL->Last+1){//检查空表及删除位置的合法性
printf("不存在第%d个元素",i);
return;
}
for(j=i;jLast;j++)
PtrL->Data[j-1]=PtrL->Data[j];
PtrL->Last--;
return;
}//平均比较次数为(n-1)/2,平均时间性能为O(n).
【查找功能实现】
遍历顺序表,比较目标元素与各位置处元素是否相等
若相等,结束遍历,返回其位置;若遍历结束仍未找到,则返回-1
int Find(ElementType X,List PtrL)// 查找
{
int i=0;
while(iLast&&PtrL->Data[i]!=X)
i++;
if(i>PtrL->Last) 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 +;
}
if(pre==NULL||cnt!=i-1||pre->Next==NULL){
printf("删除位置参数错误");
}
else{
tmp = pre->Next;
pre->Next = tmp->Next;
free(tmp);
printf("删除成功");
}
}
7.遍历链表并输出
void DisLinkList(List L)
{
List p = L->Next;
printf("输出链表: ");
while (p)
{
printf("%d ", p->Data);
p = p->Next;
}
}
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]
以上为《第二周 数据结构学习》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。