L.data=(int*)malloc((L.MaxSize+len)*sizeof(int));
时间: 2023-08-17 17:04:36 浏览: 68
这段代码是用于动态分配内存空间它使用了malloc函数来分配一块内存空间,大小为`(L.MaxSize+len)*sizeof(int)`字节。然后将返回的内存地址赋值给了`L.data`,这个变量的类型是`int*`,即指向int类型数据的指针。这样,`L.data`就指向了一个能够容纳`(L.MaxSize+len)`个int类型数据的连续内存空间。
相关问题
#include <stdio.h> #define InitSize 10 typedef struct{ int *data; int MaxSize; int length; }SeqList; //void InitList(SeqList &L){ // //用 malloc函数申请一片连续的存储空间 // L.data=(int *)malloc(InitSize*sizeof(int)); // L.length=0; // L.MaxSize=InitSize; //} //增加动态数组的长度 //void IncreaseSize(SeqList &L, int len){ // int *p=L.data; // L.data=(int *)malloc((L.MaxSize+len)*sizeof(int)); // for(int i=0; i<L.length;i++){ // L.data[i]=p[i]; // } // L.MaxSize=L.MaxSize+len; // free(p); //} //插入操作,在表L中的第i个位置插入指定元素e bool ListInsert(SeqList &L,int i,int e){ if(i<1||i>L.length+1)//判断要插入的位置是否合法 return false; if(L.length>=InitSize)//超出空间了 return false; for(int j=L.length;j>=i;j--)//移动顺序表中的元素 L.data[j]=L.data[j-1]; L.data[i-1]=e;//数组下标从零开始,插入第一个位置,访问的下标为0 L.length+=1; return true; } //删除数据表元素 void PrintList(SeqList L){ for(int i=0;i<L.length;i++){ printf("%4d",L.data[i]); } printf("\n"); } int main() { SeqList L; bool ret; //手动赋值 L.data[0]=1; L.data[1]=2; L.data[2]=3; L.data[3]=4; ret=ListInsert(L,2,60); if(ret){ printf("插入成功\n"); PrintList(L); }else{ printf("插入失败\n"); } return 0; }哪里有错
在你的代码中,存在以下几个问题:
1. 在使用 `SeqList` 结构体时,你没有在 `main` 函数中初始化 `L.data` 数组。在使用指针时,需要先分配内存空间。你可以在 `main` 函数中使用 `malloc` 函数为 `L.data` 分配内存空间,或者在 `InitList` 函数中进行初始化。
2. 在 `ListInsert` 函数中,你使用 `L.length` 来判断是否超出了顺序表的最大长度,但是在插入元素之前没有将 `L.length` 初始化为 0。在初始化 `SeqList` 结构体时,应该将 `L.length` 初始化为 0。
3. 在 `ListInsert` 函数中,移动元素时,循环的终止条件应该是 `j > i-1` 而不是 `j >= i`。因为数组下标从 0 开始,所以要将元素往后移动一个位置,需要从最后一个元素开始移动。
4. 在 `ListInsert` 函数中,插入元素时将 `e` 赋值给了 `L.data[i-1]`,这是正确的。但是你的注释写的是插入第一个位置,实际上应该是插入第 i 个位置。
修复以上问题的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10
typedef struct{
int *data;
int MaxSize;
int length;
}SeqList;
void InitList(SeqList &L){
L.data = (int *)malloc(InitSize * sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
bool ListInsert(SeqList &L, int i, int e){
if(i < 1 || i > L.length+1)
return false;
if(L.length >= InitSize)
return false;
for(int j = L.length-1; j >= i-1; j--)
L.data[j+1] = L.data[j];
L.data[i-1] = e;
L.length++;
return true;
}
void PrintList(SeqList L){
for(int i = 0; i < L.length; i++){
printf("%4d", L.data[i]);
}
printf("\n");
}
int main() {
SeqList L;
bool ret;
InitList(L);
L.data[0] = 1;
L.data[1] = 2;
L.data[2] = 3;
L.data[3] = 4;
ret = ListInsert(L, 2, 60);
if(ret){
printf("插入成功\n");
PrintList(L);
}else{
printf("插入失败\n");
}
free(L.data);
return 0;
}
```
请注意,我在代码中增加了 `<stdlib.h>` 头文件的引用,并在 `InitList` 函数中添加了内存分配和释放的操作。
希望这可以解决你的问题!如果还有其他问题,请随时提问。
#include<stdio.h> #define MAXSIZE 100 #include<malloc.h> typedef struct node{ int data; struct node*next; }LNode,*Linklist; void create(Linklist L){ int m; Linklist s; s=L; while(1){ scanf("%d",&m); if(m==0)break; Linklist p=(Linklist)malloc(sizeof(LNode)); p->data=m; p->next=NULL; s->next=p; s=p; } } int lentgh(Linklist L){ Linklist p=L->next; int len=0; while(p){ p=p->next; len++; } return len; } void Bobblesort(Linklist L){ int len=lentgh(L); Linklist p; int a; for(int i=0;i<len-1;i++){ p=L->next; for(int j=0;j<len-i-1;j++){ if(p->data>p->next->data) { a=p->next->data; p->next->data=p->data; p->data=a; } p=p->next; } } } void Delete(Linklist L){ Linklist p=L->next; while(p->next){ if(p->data==p->next->data) { Linklist tmp=p->next; p->next=p->next->next; free(tmp); }p=p->next; } } void output(Linklist L){ Linklist p; p=L->next; while(p){ printf("%d ",p->data); p=p->next; } } int main(){ Linklist L; L=(Linklist)malloc(sizeof(LNode)); create(L); Bobblesort(L); Delete(L); output(L); }为什么不对
这段代码存在以下问题:
1.在create函数中,传入的参数是Linklist类型,即指向节点的指针,但是在函数内部对其进行修改时,并没有传入指向指针的指针,导致在函数外部无法获取到链表的头指针。
2.在Delete函数中,当p->data==p->next->data时,应该先判断p->next是否为NULL,否则会出现访问NULL指针的错误。
3.在Delete函数中,当删除节点时,应该将p指向被删除节点的前一个节点,否则会出现遍历不完整的情况。
4.在main函数中,应该对L进行初始化,即将L指向NULL,否则L中会存在随机值,导致程序出现未知错误。
下面是修改后的代码:
```c
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct node{
int data;
struct node *next;
}LNode, *Linklist;
void create(Linklist *L){
int m;
Linklist s;
*L = (Linklist)malloc(sizeof(LNode));
s = *L;
while(1){
scanf("%d",&m);
if(m == 0) break;
Linklist p = (Linklist)malloc(sizeof(LNode));
p->data = m;
p->next = NULL;
s->next = p;
s = p;
}
}
int len(Linklist L){
Linklist p = L->next;
int len = 0;
while(p){
p = p->next;
len++;
}
return len;
}
void BubbleSort(Linklist L){
int i, j, len = len(L);
Linklist p;
int a;
for(i = 0; i < len - 1; i++){
p = L->next;
for(j = 0; j < len - i - 1; j++){
if(p->data > p->next->data){
a = p->next->data;
p->next->data = p->data;
p->data = a;
}
p = p->next;
}
}
}
void Delete(Linklist L){
Linklist p = L->next;
Linklist tmp;
while(p != NULL && p->next != NULL){
if(p->data == p->next->data){
tmp = p->next;
p->next = tmp->next;
free(tmp);
}else{
p = p->next;
}
}
}
void output(Linklist L){
Linklist p;
p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
}
int main(){
Linklist L = NULL;
create(&L);
BubbleSort(L);
Delete(L);
output(L);
return 0;
}
```
注意:这里修改后的代码仅仅是修正了代码的问题,但是并没有改变代码的逻辑,所以如果前面存在的逻辑错误,还需要根据具体需求进行修改。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)