#include<stdio.h>
#include<stdlib.h>
typedef struct{
int *array;
int size;
}Array; //定义一个Array类型
Array array_create(int init_size)
{
//定义一个Array类型的变量并初始化
Array a;
a.size=init_size;
a.array=(int*)malloc(sizeof(int)*a.size);//分配内存空间
return a;
}
//指针变量,清零变量,因为Array里面有*array不会被释放
void array_free(Array *a)
{
free(a->array);
a->array=NULL;
a->size=0;
}
//封装
int array_size(const Array *a)//数据size访问
{
return a->size;
}
int* array_at(Array *a,int index)//数据array访问
{
return &(a->array[index]);//返回指针占的空间小,该指针指向a.array
}
int main()
{
Array a=array_create(100);
printf("%d\n",array_size(&a));
*array_at(&a,0)=10;//对指针的指针指向的值赋值
printf("%d\n",*array_at(&a,0));
array_free(&a);
}
链表:
定义:
数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
typedef struct _node{
int value;//所存的数据
struct _node *next;//指针,指向下一个数据
}Node;//把这个结构体的类型名定义成Node
#include<stdio.h>
#include<stdlib.h>
typedef struct _node{
int value;
struct _node *next;
}Node;
int main()
{
Node *head=NULL;//头指针,访问链表
int number;
do{
scanf("%d",&number);
if(number!=-1){
//开辟内存空间分配给新的结点
Node *p=(Node*)malloc(sizeof(Node));
//初始化*p
p->value=number;
p->next=NULL;
Node *last=head;
//遍历链表
if(last){
while(last->next){//如果last的指针域不为NULL
last=last->next;//last指向last的指针域,即指向下一个结点
}
//last的指针域为NULL,last是最后一个结点,last便指向自己
last->next=p;
}else {
head=p;
}
}
}while(number!=-1);
}