c语言指针结构体遍历,求解:如何遍历结构体指针

这篇博客介绍了如何在C语言中实现一个简单的ArrayList,包括初始化、增加元素、查找元素和修改元素等基本功能。博客作者探讨了指针操作、动态内存分配以及线性表的长度计算,同时展示了代码实现过程,但未完成全部功能,如删除和遍历操作。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

在遍历的时候出现了错误

大神们帮我看看 谢谢你们

/*

###1.实现一个简单的Arraylist。

Arraylist的功能有如下

a.增加元素

b.查找元素

c.修改元素

4.查找元素

而且他是有下标的,也就是类似操作一个数组.

线性表这里面我们暂时不使用动态扩容了,在链表的时候我们在采取动态扩容的方法

*/

#define MAX_SIZE 103 //设置最大存储容量为20

#define INIT_SIZE 5 //初始的存储容量为5

typedef int Element;// 设置一下变量的类型.以后用Element来代替int,作用我也不是很清楚待查...

#include

#include

/*

代码步骤分析

//1.我们首先要创建一个线性表,那么我们就需要去查看

我们的链表是否存在 a.存在我们就把链表取出来,之后继续下面的操作 b.不存在那么就需要我们去创建一个链表

在这之前我们需要了解一些 东西 指针的操作

eg: int *p;

int a=10;

p=&a; 把a的地址给了p,p就是a的地址,之后采用*运算符去把地址里面的值取出来

我们来实践一下

想到还是指针操作的方便

*/

typedef struct

{

/*

这里面的参数就值得商议了

首先一定要有一个element 类型的指针了,用来存储变量的信息

其次,还需要知道现在存储的是第几个值.以及

(数据结构与我们评出所基础的数组有一点点不同.是给人看的.不能从0开始查)

*/

Element *data;

int length;

int maxSize;//当前存储的最大容量

/*

如果说像我这么定义的话那么只能够存储一位整数.

*/

}Sql_L;

/*

写到这里发现了一个问题.我们可以在一开始main函数刚刚进来的时候,就先调用这个函数

判断的方法判断他的长度是否为0

写到这里我也有一些疑惑(可能是学java写太长时间了.都不清楚c语言中能不能调用.length...- -!)

数组以'\0'为结束标志,一般可以通过此方法求出数组(有用数据的)长度,数组长度是定义的,一般不用求的。

当然也可以通过数组内存空间大小来求数组长度,

如:sizeof函数也可以求数组大小

我们需要去加一个函数用去求数组的长度的函数getLength();

下面我们去写如何初始化一个线性表

*/

/*有没有返回值,我们一会再去讨论我认为是有的 */

int initArrayList(Sql_L *ArrayList )//好像传出的需要是这个类型的数据

{

//算了,既然用到了初始化线性表那么还是 来写一个动态赋予吧.不是动态赋予的话很简单 简单的查了一下 可以new

ArrayList->data = (Element *)malloc(sizeof(Element *)*INIT_SIZE);

if(ArrayList->data == NULL)

{

printf("初始化失败,程序即将推出!");

exit(0);

}

else

{

ArrayList->length = 0;

ArrayList->maxSize =MAX_SIZE;

printf("初始化成功!");

return 1;//这样传出的话,传出的是一个地址!

}

}

/*@@@@1 int getLength() */

int getLength(Sql_L *L)

{

/*思考我们该如何去确定一个指针里面到底有没有值

如果说是一个数组的花那么很好办 有两种方法

作为一个指针可以用.length么?显然是不可以的

好吧!他有.length方法

*/

return L->length;

}

int insertElement(Sql_L *L)

{

//下节课再说.我们来听一首歌先

//加到后面我们不用去考虑那么多.直接怼就可以不过我要知道到底加到第几个

//我就是想知道而已.然后回一下汇编 看能不能找到我刚刚插进去的数字

if(L->length >=20)

{

printf("容量已经满了,需要扩容了!");

return 0;

}

else

{

int element;//初始化 与 不初始化的区别在哪里?

printf("请输入你要插入的数字:(选择的第一种很方式为追加到元素的尾部)");

scanf("%d",&element);

printf("element的值位:%d",element);

L->data=element;

L->length++;

return 1;

}

//我还是需要判断下长度的

}

void prior(Sql_L *L)

{

//先获取他的长度

int i ;

for(i = 0; i < L->length; i++)

{

printf("进入到这里面了里面的数值为\n");

printf("%d\n",L->data);

printf("当前的长度为:%d",L->length);

// *(L.data+i-1)

}

}

/* 把所有写好的函数都放在上面这样并无耽误事.不然以后还需要在上面声明一下神烦.*/

int main()

{

/*刚刚写好初始化的部分问题就来了.我竟然不知道如何去使用这个*ArrayList变量,先拿过来直接用试试*/

//我是地址你也是地址,咱俩可以直接用地址进行交互没毛病吧!

/* 接下来如何去连接这是一个问题 */

/* 调用出错,我们应考虑 怎么把定义过的结构体类型拿过来用以及 在动态创键一个数组的时候到底该返回什么*/

Sql_L ArrayList;

int length;

int status;

int insertElement_status;

int backStatus = 1;

status = initArrayList(&ArrayList);

if(status)

{

printf("初始化成功!\n");

}

/* 插入数据*/

/* if(insertElement_status == 1)

{

printf("添加成功!");

}

else

{

printf("添加数据失败!");

}

*/

while(backStatus)

{

backStatus = insertElement(&ArrayList);

prior(&ArrayList);

}

/* 接下来是遍历函数*/

printf("遍历成功!");

/*

先去实现他的基本功能

a.增加功能 按照下标 (这里面的元素是可以重复的)(二笔了.说错了 咱们全部按照JAVA中的Arraylist去实现 查看下api)

boolean add(E e)

将指定的元素添加到此列表的尾部。

void add(int index, E element)

将指定的元素插入此列表中的指定位置。

先来实现这两个功能

b.删除功能 删除下标

c.修改功能

d.查找功能

*/

/*

第一步:我们先去考虑 先去测量 这个结构的长度 @@@@1

*/

//我就是想看一下我成功了没有!

/* 一个比较大的疑问 是不是我们全局操作的就是这一个对象*/

/* 下面这个函数为 测试 添加的数据是否成功的

以及再写一个方法,用来遍历我们的数据

*/

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值