概述
目录
前言:开始正式的数据结构复习,由于基础很差,所以就先从代码入手,我会更新每一部分的学习笔记。喜欢用代码注释,0基础小白专用
线性表的顺序存储实现
助解图
查找操作
插入操作
助解图:
删除操作
助解图
前言:开始正式的数据结构复习,由于基础很差,所以就先从代码入手,我会更新每一部分的学习笔记。喜欢用代码注释,0基础小白专用
线性表的顺序存储实现
//实现线性表的顺序存储
//首先定义一个结构体LNode
/*
typedef 关键字来定义自己习惯的数据类型名称
*/
typedef struct LNode *List;// 此时 List L 等价于 struct LNode* L,L是存储结构体LNode类型的变量的地址的指针变量
struct LNode{
//定义数组
int data[1000]; //假定数据类型是int,MAXSIZE是1000
//定义指向数组的指针(存放“相对”地址)
int last;
};
//初始化表
List makeEmpty() {
List L;
L = (List)malloc(sizeof(struct LNode));
/*
函数的返回值类型是 void *,void 并不是说没有返回值或者返回空指针
,而是返回的指针类型未知。例如:char *ptr = (char *)malloc(10);
*/
L->last = -1;//初始数组内没有数据,而指针last+1=length,所以last=-1
}
助解图
查找操作
//查找值为x的操作
int find(int x, List Ptrl){//查找平均移动次数是(n+1)/2-----即可能最好第一次就找到,最坏n次才找到(1+2+3+....+n)/n=(n+1)/2
int i = 0;
while (i <= Ptrl->last && x != Ptrl->data[i])
i++; //退出循环条件---越界或者已找到
//如果已经越界
if (i > Ptrl->last) {
return -1;
}
else {
return i;//如果已经找到,则返回存储位置
}
}
插入操作
//插入操作
void insert(int i, List Ptrl,int X) {//平均移动次数n/2
int j;
//在第i个位置插入,先移动i-1以后的位置再进行插入,注意是从右到左的移动
//但是一定要先考虑极端情况:
//位置已满
if (Ptrl->last + 1 >= 1000) {//主要这里MAXSIZE是1000
printf("表满");
return;
}
//插入位置不合法
if (i<1 || i - 1>Ptrl->last + 1) {
/*
i - 1相当于是要插入的数组中的位置(因为以0开始)好比排队一样,我最多只可以在最后一个人的后面插队,所以i - 1要小于最后位置last的后面即Ptr.last+1
*/
printf("插入位置不合法");
return;
}
//插入操作
for (j = Ptrl->last; j >= i-1; j--) {//从最后一个开始移动,一直到插入位置i-1
Ptrl->data[j + 1] = Ptrl->data[j];
}
//插入新元素
Ptrl->data[i - 1] = X;
//变更last指针位置
Ptrl->last++;
return;
}
助解图:
删除操作
//删除操作
void Delete(int i, List Ptrl) {
int j;
//老规矩,判断合法性
if (i<1 || i - 1>Ptrl->last) {
printf("删除位置不合法");
return;
}
//开干,注意是从右到左的方向,从i位置开始
for (j = i; j <= Ptrl->last; j++) {
//从右往左,即大的赋值小的
Ptrl->data[j - 1] = Ptrl->data[j];
//别忘了last
Ptrl->last--;
return;
}
}
助解图
最后
以上就是要减肥大象为你收集整理的数据结构复习之线性表的顺序存储实现以及插入和删除,查找操作的全部内容,希望文章能够帮你解决数据结构复习之线性表的顺序存储实现以及插入和删除,查找操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复