int ListInsert(SqList &L, int i, ElemType e) { if(L.length < 1 || i > L.length+1 || L.length+1 > MAXSIZE) return 0; for(int j = L.length+1; j >= i; j--) { L.elem[j] = L.elem[j-1]; } L.elem[i-1] = e; L.length++; return 1; }
时间: 2024-03-19 14:41:18 浏览: 158
这段代码是用来实现顺序表中插入元素的功能的。其中SqList是一个结构体类型,包含了顺序表的元素数组L.elem和顺序表的长度L.length,MAXSIZE是顺序表中元素的最大数量。如果顺序表的长度为0或者插入位置i超出了顺序表的范围,或者插入后顺序表长度超过了最大值,则返回0表示插入失败。否则,从顺序表的末尾开始往前遍历到插入位置i,将插入位置及其之后的元素全部后移一位,然后在插入位置处插入元素e,最后将顺序表的长度加1,返回1表示插入成功。
相关问题
Status listInsert(Sqlist& l, Elemtype e) { if (l.length == MAX_DICT_SIZE) return ERROR; l.elem[l.length] = e; l.length++; return OK; } bool isWordExist(Sqlist& l, const Elemtype& word) { for (int i = 0; i < l.length; i++) { if (l.elem[i] == word) return true; } return false; }分别逐行分析这两段代码谢谢
好的,我来逐行分析这两段代码。
第一段代码:
```
Status listInsert(Sqlist& l, Elemtype e) {
if (l.length == MAX_DICT_SIZE)
return ERROR;
l.elem[l.length] = e;
l.length++;
return OK;
}
```
该函数是一个在顺序表中插入元素的函数。其中,`Sqlist` 是一个结构体类型,`Elemtype` 是一个字符串类型,`MAX_DICT_SIZE` 是顺序表最大长度的常量。
第1行:函数名为 `listInsert`,输入参数有两个,`Sqlist& l` 表示输入参数是一个引用类型的顺序表,`Elemtype e` 表示输入参数是一个字符串类型的元素。
第2行:如果当前顺序表的长度已经达到最大长度,即 `l.length` 等于 `MAX_DICT_SIZE`,则返回一个错误。
第4行:将元素 `e` 插入到顺序表的最后一个位置,即 `l.elem[l.length]`。
第5行:将顺序表的长度加1。
第6行:返回一个成功的状态。
第二段代码:
```
bool isWordExist(Sqlist& l, const Elemtype& word) {
for (int i = 0; i < l.length; i++) {
if (l.elem[i] == word)
return true;
}
return false;
}
```
该函数是一个查找字符串在顺序表中是否存在的函数。
第1行:函数名为 `isWordExist`,输入参数有两个,`Sqlist& l` 表示输入参数是一个引用类型的顺序表,`const Elemtype& word` 表示输入参数是一个字符串类型的关键字。
第2行:使用循环遍历整个顺序表。
第3-4行:如果找到了和输入关键字相同的字符串元素,则返回 true。
第6行:如果遍历整个顺序表都没有找到和输入关键字相同的元素,则返回 false。
顺序表定义如下,分别写出在顺序表中第i个位置插入数据元素e和删除数据元素e的算法。 Typedef struct{ ElemType *elem; int length; int listsize; }SqList; bool ListInsert(SqList &L, int i, ElemType e){ bool ListDelete(SqList &L, int i, ElemType &e){
在顺序表中第i个位置插入数据元素e的算法如下:
```
bool ListInsert(SqList &L, int i, ElemType e){
if (i < 1 || i > L.length + 1 || L.length == L.listsize)
return false; // 插入位置不合法或者顺序表已满
for (int j = L.length; j >= i; j--)
L.elem[j] = L.elem[j-1]; // 数据元素后移
L.elem[i-1] = e; // 插入数据元素
L.length++; // 长度加1
return true;
}
```
删除顺序表中第i个位置的数据元素e的算法如下:
```
bool ListDelete(SqList &L, int i, ElemType &e){
if (i < 1 || i > L.length)
return false; // 删除位置不合法
e = L.elem[i-1]; // 保存被删除的元素
for (int j = i; j < L.length; j++)
L.elem[j-1] = L.elem[j]; // 数据元素前移
L.length--; // 长度减1
return true;
}
```
其中,`SqList`是顺序表的结构体类型,`ElemType`是数据元素类型,`L.elem`是存储数据元素的数组指针,`L.length`是顺序表的当前长度,`L.listsize`是顺序表的最大长度。
阅读全文