int main()
{
ListPtr L; //这行代码不太明白什么意思
L = (ListPtr)malloc(sizeof(Sqlist)); //这行大概是分配内存空间,对( ListPtr )不明白什么意思
return 0;
}
1
putaozhenhaochi 2021-03-18 17:11:37 +08:00 via Android
找找 def ListPtr 的代码
|
2
konar 2021-03-18 17:13:30 +08:00
看起来 ListPtr 可能是 Sqlist*
找到 ListPtr 的定义看看 |
3
virusdefender 2021-03-18 17:15:07 +08:00
就是一个类型
|
4
awanganddong OP ```
#include <stdio.h> #include <stdlib.h> #define LIST_TNIT_SIZE 100 typedef int ElemType; typedef enum Status { success,fail,fatal,range_error } Status; typedef struct Sqlist { ElemType *elem; int length; int listsize; } Sqlist,*ListPtr;//重命名并且定义一个结构体指针 Status List_Init(ListPtr L) { Status status = fatal; L->elem = (ElemType *)malloc(LIST_TNIT_SIZE*sizeof(ElemType)); if(L->elem!=NULL) { L->length=0; L->listsize=LIST_TNIT_SIZE; status = success; } return status; } //------------------插入函数----------------- void List_Input(ListPtr L) { int n; printf("请输入数据元素的个数(1 - 5):"); while(1) { scanf("%d",&n); if(n>LIST_TNIT_SIZE||n<=0) printf("数据出错,请重新输入:\n"); else break; } for(int i=0; i<n; i++) { printf("请输入第%d 个数据元素:",i+1); scanf("%d",L->elem+i); L->length++; } } //-------------------输出----------------- void print(ListPtr L) { printf("顺序表中的元素为:"); for(int i=0; i<L->length; i++) { printf("%d ",*(L->elem+i)); } printf("\n"); } //--------------------插入------------------ void List_Insert(ListPtr L) { int pos,data; printf("请输入插入元素的位置:"); scanf("%d",&pos); printf("请输入插入元素的数值:"); scanf("%d",&data); if(pos>=L->length) { *(L->elem+pos-1)=data; L->length+=pos; } else { for(int i=L->length; i>=pos; i--) { *(L->elem+i)=*(L->elem+i-1); } L->length++; *(L->elem+pos-1)=data; } } //---------------------主函数--------------- int main() { ListPtr L; Status status = fail; L = (ListPtr)malloc(sizeof(Sqlist)); List_Init(L); List_Input(L); print(L); List_Insert(L); print(L); //printf("%d",L->listsize); return 0; } ``` 整体代码是这个样子,但是我追 ListPtr L 没找到它的定义 |
5
konar 2021-03-18 17:18:21 +08:00
ListPtr 看命名是一个指针类型,第一行定义了一个指针,但没有任何指向,第二行的(ListPtr)是强制类型转换,malloc 的返回类型是 void*,将其转换成了具体的指针类型
|
6
konar 2021-03-18 17:19:16 +08:00
```
typedef struct Sqlist { ElemType *elem; int length; int listsize; } Sqlist,*ListPtr;//重命名并且定义一个结构体指针 ``` 这里就是 ListPtr 的定义了,他就是 Sqlist 的指针 |
7
awanganddong OP @konar 明白了
那这个 ListPtr 后面跟的 L 是声明 long 类型吗 还有就是 malloc 分配内存成功之后,返回的值是该内存地址的值。按我的理解是一个 16 地址, 这里可以转化成具体指针类型是为了什么 |
8
konar 2021-03-18 17:29:34 +08:00
|
9
awanganddong OP @konar 透彻了。 感谢各位
|
10
awanganddong OP @konar 再请教你下面这段的意思。
``` if(pos>=L->length) { *(L->elem+pos-1)=data; L->length+=pos; //这个不是应该++吗???? } else { for (int i=L->length; i>=pos; i--) { *(L->elem+i)=*(L->elem+i-1); //循环位置移动,把 7 的位置,放到 8 的位置 } L->length++; *(L->elem+pos-1)=data; //这个是赋值,这里又不太清楚了 } ``` |
11
konar 2021-03-19 15:16:23 +08:00
@awanganddong
++肯定不行,原本 length 为 5,要插入到 9,++的话结果不是成了 6 了吗,但+=也不太合适,不考虑数组容量不够也应该是 L->length=pos 啊 *(L->elem+pos-1)=data 相当于 L->elem[pos-1]=data,给数组元素赋值 |
12
awanganddong OP @konar 我妹老师布置的上机测试题,她不大明白。然后让我给讲下具体思路。
然而我吃了没文化的亏。 |