void fun1(SqList *A){ int k=0, i; for(i=0;i<A->length;i++) if (A->data[i]!=0){ A->data[k]=A->data[i]; k++; } A->length=k; }解读
时间: 2024-03-28 09:36:18 浏览: 13
该函数名为 `fun1`,参数为一个指向 `SqList` 结构体的指针 `A`。
函数的作用是将 `A` 中所有非零元素移动到数组的前面,并统计非零元素的个数,最终将 `A` 的长度修改为非零元素的个数。
函数中定义了一个整型变量 `k`,初值为 0,变量 `i` 用于循环遍历 `A` 中的元素。
在循环中,如果 `A` 中的当前元素不为 0,则将该元素赋值给 `A` 中下标为 `k` 的位置,并将 `k` 的值加 1。
最后,将 `A` 的长度修改为 `k`,即非零元素的个数。
相关问题
解释void initList(SqList* L) { L->length = 0; }
### 回答1:
这是一个函数定义,函数名为 initList,参数为指向 SqList 类型的指针 L。函数体内的语句 L->length = 0; 的作用是将 L 所指向的结构体中的 length 成员变量赋值为 0,即将顺序表的长度初始化为 0。由于函数没有返回值,因此使用了 void 关键字来表示该函数不返回任何值。
### 回答2:
函数void initList(SqList* L)的作用是初始化一个顺序表L,使其长度为0。
其中,参数SqList* L表示传入的顺序表指针L,通过指针传递方式可以直接修改顺序表L的值。
在函数体内,代码L->length = 0的作用是将顺序表L的长度(即元素个数)设置为0。这样做的目的是清空顺序表L中的所有元素,实现初始化的效果。
具体来说,L->length表示通过指针L访问到顺序表的长度属性length,并将其赋值为0,即清空了顺序表中的元素。这样一来,顺序表L就变成了一个空表,可以重新添加元素或进行其他操作。
总结起来,函数void initList(SqList* L)的功能是初始化顺序表L,即将顺序表的长度设置为0,达到清空元素的效果。
### 回答3:
void initList(SqList* L) { L->length = 0; } 是一个用于初始化线性表的函数。
参数SqList* L是一个指向线性表的指针,通过传入指针来修改线性表的内容。
函数的作用是将线性表的长度设置为0,实现对线性表的初始化。
通过将length成员变量设置为0,可以清空线性表,并将其变为空表。
初始化线性表的目的是为了准备存储数据的空间,确保线性表能够正确地存储和访问数据。
一般情况下,在创建线性表之后,需要使用该函数进行初始化。
初始化操作通常是在创建线性表之后立即调用的,也可以在需要清空线性表内容时使用。
通过调用initList函数,可以将线性表还原到初始状态,方便后续的数据操作。
总之,initList函数用于初始化线性表,将其长度设置为0,清空表中的数据,为后续的数据操作做准备。
#include <stdio.h> #include <malloc.h> #define MAXSIZE 50 typedef char elemtype;typedef struct { elemtype v[MAXSIZE]; int last; }SqList;SqList *Init_SeqList() { SqList L;L=(SqList)malloc(sizeof(SqList));L->last=-1;返回 L;} void Create(SqList L) { int i=0; elemtype ch; scanf(“%c”,&ch); while(ch!='\n') { L->v[i++]=ch; scanf(“%c”,&ch);L->last=i-1;} } void PrintL(SqList L) { int i; printf(“此表为:\n”); for(i=0;i<L->last;i++) { printf(“%c->”,L->v[i]); } printf(“%c\n”,L->v[i]); } void Length(SqList *L) { printf(“此表长度:\n%d”,L->last+1); printf(“\n”); } void Insert(SqList *L,int i,elemtype x) { int j; if(L->last==0) printf(“Error!\n”); if(i<1||i>L->last) printf(“Error!”);for(j=L->last;j>=i-1;j--) L->v[j+1]=L->v[j];L->v[i-1]=x;L->last++;打印L(L);} void Delete(SqList *L,int i) { int j; if(L->last==-1) printf(“Error!”); if(i<1||i>L->last+1) printf(“Error!”);for(j=i;j<=L->last;j++) L->v[j-1]=L->v[j];L->最后--;打印L(L);} void main() { int i,j,k; elemtype a,b;SqList *L;L=Init_SeqList();printf(“建立顺序表:\n”);创建(L);打印L(L);长度(L);printf(“\n”);printf(“请输入你想插入的元素及其位置:\n”);scanf(“%c %d”,&b,&j);插入(L,j,b);printf(“请输入你想删除的位置:\n”);scanf(“%d”,&k);删除(L,k);}在此基础上加入 输入你想查找的元素序位,输出你查找的元素的部分
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
typedef char elemtype;
typedef struct {
elemtype v[MAXSIZE];
int last;
} SqList;
SqList *Init_SeqList() {
SqList *L;
L = (SqList*)malloc(sizeof(SqList));
L->last = -1;
return L;
}
void Create(SqList *L) {
int i=0;
elemtype ch;
scanf("%c", &ch);
while(ch != '\n') {
L->v[i++] = ch;
scanf("%c", &ch);
}
L->last = i-1;
}
void PrintL(SqList *L) {
int i;
printf("此表为:\n");
for(i=0; i<L->last; i++) {
printf("%c->", L->v[i]);
}
printf("%c\n", L->v[i]);
}
void Length(SqList *L) {
printf("此表长度:%d", L->last+1);
printf("\n");
}
void Insert(SqList *L, int i, elemtype x) {
int j;
if(L->last == MAXSIZE-1)
printf("Error!\n");
if(i<1 || i>L->last+1)
printf("Error!");
for(j=L->last; j>=i-1; j--)
L->v[j+1] = L->v[j];
L->v[i-1] = x;
L->last++;
PrintL(L);
}
void Delete(SqList *L, int i) {
int j;
if(L->last == -1)
printf("Error!");
if(i<1 || i>L->last+1)
printf("Error!");
for(j=i; j<=L->last; j++)
L->v[j-1] = L->v[j];
L->last--;
PrintL(L);
}
void Search(SqList *L, int i) {
if(i<1 || i>L->last+1)
printf("Error!");
else
printf("查找元素:%c\n", L->v[i-1]);
}
void main() {
int i, j, k;
elemtype a, b;
SqList *L;
L = Init_SeqList();
printf("建立顺序表:\n");
Create(L);
PrintL(L);
Length(L);
printf("\n");
printf("请输入你想插入的元素及其位置:\n");
scanf("%c %d", &b, &j);
Insert(L, j, b);
printf("请输入你想删除的位置:\n");
scanf("%d", &k);
Delete(L, k);
printf("请输入你想查找的元素的序位:\n");
scanf("%d", &i);
Search(L, i);
}