各位懂哥,我是初学者,我有个问题想要请教,这个代码在main方法中,为什么直接使用方法调用的办法能够直接打印,而直接用for循环的,程序却编译不运行,求赐教。【代码在最下面】
一、【结果截图】
- 方法调用【printfList()方法】的可以打印
- 如下是直接用for打印但是无操作的截图。
二、【源代码截图】
#include"stdio.h"
#include"stdlib.h"
#define OK 1
#define ERROR -1
#define MaxSize 100
typedef int ElemType;
// 声明顺序表的结构体类型
typedef struct
{
ElemType *elem; // 线性表数据存放的空间
int length; // 当前线性表的长度
}SqList; // 定义数据类型的名称
/**
* @brief * 初始化线性表
* 构造一个空的线性表,申请存储空间
* @param L 线性表
*/
void InitList(SqList *L){
// 申请空间,分配内存,分配失败返回ERROR
L->elem = (ElemType *)malloc(sizeof(ElemType)*MaxSize);
if(L->elem == NULL){
printf("内存分配失败!\n");
exit(1);
}
// 初始化当前线性表的长度
L->length = 0;
printf("内存分配成功!\n");
}
/**
* @brief 销毁线性表
*/
void DestroyList(SqList *L){
if(L->elem) free(L);
}
/**
* @brief 清空线性表
*/
void ClearList(SqList *L){
L->length = 0;
}
/**
* @brief Get the Length object 获取线性表长度
*/
int GetLength(SqList L){
return L.length;
}
/**
* @brief 判断线性表是否为空
* @return int
*/
int EmptyList(SqList L){
if(L.length == 0) return 1;
else return -1;
}
/**
* @brief 打印
*/
void printfList(SqList *L){
for(int i = 0;i < GetLength(*L);i++)
printf("%d ",L->elem[i]);
printf("\n");
}
/**
* @brief 插入元素
* @param L 顺序表
* @param i 插入位置
* @param e 插入值
*/
void ListInsert(SqList *L,int i,ElemType e){
// 插入值非法
if(i < 0 || i > L->length){
printf("插入位置非法!\n");
exit(1);
}
// 存储空间已满
if(L->length >= MaxSize){
printf("顺序表超出范围!\n");
exit(1);
}
for(int j = L->length-1;j >= i;j--)
L->elem[j+1] = L->elem[j];
L->elem[i] = e; // 在位置i插入数据e
L->length++; // 顺序表长度加1
}
/**
* @brief 删除元素
* @param L 顺序表
* @param i 位置
*/
int ListDelete(SqList *L,int i){
if(i < 1 || i>L->length){
printf("删除非法!\n");
exit(1);
}
for(int j = i;j <= L->length;j++){
L->elem[j-1] = L->elem[j];
}
L->length--;
}
int main(){
SqList *L;
int n,e; // n插入元素个数,e插入元素
InitList(L);
printf("请输入顺序表的大小:");
scanf("%d",&n);
printf("请输入顺序表的元素:");
for(int i = 0;i < n;i++){
scanf("%d",&e);
ListInsert(L,i,e);
}
printf("打印:");
// printfList(L);
for(int i = 0;i < L->length;i++)
printf("%d ",L->elem[i]);
printf("\n");
printf("当前长度:%d\n",GetLength(*L));
ListDelete(L,2);
printf("删除后长度:%d\n删除后打印:",GetLength(*L));
// printfList(L);
for(int i = 0;i < L->length;i++)
printf("%d ",L->elem[i]);
printf("\n");
}
各位懂哥,懂的话希望教一下我这个初学者,给点建议或解决方法都可以,谢谢了,感激之情无以言表。