动态数组的实现原理_动态数组怎么定义[通俗易懂]

动态数组的实现原理_动态数组怎么定义[通俗易懂]0、指针就是地址1、指针类型:基本类型2、空指针类型变量:没有意义,只是一个指针空间,用于记录地址(不能运算)void*变量;注:由于空间指针void*不知道尺寸(类型),是不能进行+-运算的3、空地址:每个数据空间

动态数组的实现原理_动态数组怎么定义[通俗易懂]"

 0、指针    就是地址
  1、指针类型: 基本类型 
  2、空指针类型变量:没有意义,只是一个指针空间,用于记录地址(不能运算)
        void* 变量;
    注:由于空间指针void*不知道尺寸(类型),是不能进行+ -运算的
  3、空地址:每个数据空间都有地址(地址>0),设置地址为0的指针为空指针(不指向任何的元素)        
        注:指针变量必须初始化
        typedef NULL (void*)0;
        
堆区 (程序员空间):空间由用户申请,由用户来释放空间。
     API: 申请  malloc(size_t bytes)    释放:free      
        注:bytes代表字节的数量
        注:malloc/realloc返回值为NULL,申请失败
        注:头文件为 stdlib.h
    3.1使用步骤:
        1、申请 p=malloc(size_t)
        2、使用 
        3、释放    free(p);
        3.1.1变量空间
            
        3.1.2数组空间:
            概念:是一块同类型且连续的存储空间

二分查找,利用动态数组

#include<stdio.h>
	#include<stdlib.h>
	void main()
	{
		//申请一块内存空间  buf[8]
			int* p=(int *)malloc(sizeof(int)*8);    //8个人的成绩 且每个元素为4Byte
			if(NULL!=p)
			{
				int i=0;
				while(i<8)
				{
					*(p+i)=i+1;
					i++;					
				}
				int l=0,r=7,mid;
				while(l<=r)
				{
					mid=(l+r)/2;
					if(5<p(mid))
					{
						r=mid_1;
					}
					else if(5>p(mid))
					{
						l=mid+1;
					}
					else
					{
						printf("查找成功\n");
						break;
					}	
					
				}
				
			}

利用动态数组的方法写去一个字符

#include<stdio.h>
#include<stdlib.h>
void main()
{
//定义指针变量存放地址
	char* pc=NULL;   
//分配空间
	pc=(char *)malloc(sizeof(char));
//使用空间
	if(NULL!=pc)
	{
		*pc='a';
		printf("%c\n",*pc);
	}
//释放空间
	if(NULl!=pc)
    {
		free(pc);
		pc=NULL;
		
		
	}
	
	
	
	
	
}
	

利用结构体,动态数组写入元素 ,如果空间不够,继续申请一个空间,并且将老空间赋值给新空间

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Array
{
	int* data;                   //记录堆区地址
	unsigned short len; 		 //容量长度
	short index;				 //索引 实际的长度
	
};	
void main()
{
//功能:1,增加元素 2.查找3.遍历
	int opt=0;
	struct Array a={NULL,0,-1};
	while(1)
	{
		printf("please input 0/1/2/3");
		switch(opt)
		{
			case 0:  //释放
			{
				if(len>0)
				{	free(a.data)=NULL;
					a.data=NULL;
					a.len=0;
					a.index=-1;
				}
				return ;  //结束函数
			}
			break;
			case 1:   //插入成绩 当容量不足的时候申请空间
			{
				int score;
				printf("请输入成绩");
				scanf("%d\n",&score);
				//判断是否为满
				if(a.index+1=a.len)
				{
					printf("为满");
					int* pnew=(int*)malloc(sizeof(int)*(a.len+5));
					if(NULL!=pnew)
					{
						//将老空间赋值给新空间
						/*int i=0;
						for(i=0;i<a.index;i++)
						{
							pnew[i]=a.data[i];
						}
                        */
                        memcmp(pnew,a.data,(a.len)*sizeof(int));
						free(a.data);
						a.data=NULL;
						a.len+=5;
					}
					else
					{
						int sc;
						printf("please input");
						scanf("%d\n",&sc);
						a.data[++index]=sc;
					}
				}
				
			}
		}
		
		
	}

 

今天的文章动态数组的实现原理_动态数组怎么定义[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/71002.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注