C语言学习(可变数组和链表)

#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);
}

                                       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值