Write an array source code in C language

Write an array source code in C language

Dazai

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>//包含了exit
//定义了一个数据类型,类型名字struct Arr,一共四个成员
typedef enum
{
    
    
	false,true
}bool;

struct Arr
{
    
    
	int *pbase;//存储的是数组第一个元素的地址
	int len;//数组所能容纳的最大元素的个数
	int cnt;//当前数组有效元素的个数
	int increment;//自动增长因子
};


void init_arr(struct Arr * pArr,int length);//初始化

bool append_arr(struct Arr * pArr,int *va);//追加
//这里要用指针的原因是,要键入内容,需要传递值,而且根据功能不同划分了几个字母拼写
//*vi--vinsert,*va--vappend,
bool insert_arr(struct Arr *pArr,int pos,int *vi);//插入,pos的值从1开始

bool delete_arr(struct Arr *pArr,int pos,int *pval);//删除,注意这里的差别
int get();
bool is_empty(struct Arr * pArr);//是否空

bool is_full();

void sort_arr(struct Arr *pArr);//排序

void show_arr(struct Arr * pArr);//输出

void inversion_arr();//倒置


int main(void)
{
    
    
	struct Arr arr;
	int *vappend,*vinsert,q,c;//q:循环数字
	int val;

	printf("\n\n--------------------------------------------------------------------------------------------------------\n");
		printf("\t\t\t\t欢迎使用\t    *不周*     \t制作的数组\n");
		printf("\t\t\t        *******\t                 \t*******\n");
		printf("\t\t\t         ******\t                 \t******\n");
		printf("\t\t\t          *****\t                 \t*****\n");
		printf("\t\t\t           ****\t                \t****\n");
		printf("\t\t\t            ***\t                 \t***\n");
		printf("--------------------------------------------------------------------------------------------------------\n");
		printf("\t\t\t\t***************系统功能菜单****************\n");
		printf("\t\t\t\t-------------------    --------------------\n");
		printf("\t\t\t\t------   0.退出数组信息   \n");
		printf("\t\t\t\t------   1.追加数组信息   \n");
		printf("\t\t\t\t------   2.插入数组信息   \n");
		printf("\t\t\t\t------   3.删除数组信息   \n");
		printf("\t\t\t\t------   4.排列数组信息   \n");
		
		
		
		printf("您需要输入你想要对数组进行的操作\n\n");
	
	init_arr(&arr,8);//初始化
	show_arr(&arr);//显示

		for(q=0;;q++)
		{
    
    
	printf("请输入您要进行的操作:");//1是追加,2是插入,3是删除,4是排列0是退出系统
			scanf("%d",&c);
			if(c==0)
			{
    
    
				printf("您已成功退出系统!\n");
			break;
			}
			 else if(c==1)
			{
    
    
				printf("Please enter the num to append:");
					append_arr(&arr,vappend);//思考一下为什么vappend前面加不加&都无所谓
					show_arr(&arr);
	
			}
			 else if(c==2)
			 {
    
    
				insert_arr(&arr,1,vinsert);
				show_arr(&arr);
			 }
			 else if(c==3)
			 {
    
    
				delete_arr(&arr,1,&val);//这里的1是删除第一位
				show_arr(&arr);
			 }
			 else if(c==4)
			 {
    
    
				sort_arr(&arr);//顺序排列
				show_arr(&arr);
			 }
		}
				
	//printf("%d\n",arr.len );因为初始化8

	return 0;
}


void init_arr(struct Arr * pArr,int length)
{
    
    
	pArr->pbase  =(int *)malloc(sizeof(int)*length);
	if(NULL==pArr->pbase )
	{
    
    
		printf("动态内存分配失败!\n");
		exit(-1);//终止整个程序
	}
	else
	{
    
    
			pArr->len =length;
			pArr->cnt =0;
	}
	return;
}

bool append_arr(struct Arr * pArr,int *va)
{
    
    

	if(is_full(pArr))
		return false;//满时返回
	else
	{
    
    
		printf("请输入您要追加的数字:\n");
			scanf("%d",&va);//
		pArr->pbase[pArr->cnt]=va;//不满时追加
		(pArr->cnt)++;
		return true;
	}
}

bool insert_arr(struct Arr *pArr,int pos,int *vi)//这里默认的功能是插入到pos这个值的前面
{
    
    
	int i;

	if(is_full(pArr))
		return false;

	if(pos<1 || pos>pArr->cnt+1)
		return false;

	for(i=pArr->cnt-1;i>=pos-1;--i)
	{
    
    
		pArr->pbase[i+1]=pArr->pbase[i];
	}
	printf("请输入您要插入的数字:\n");
	scanf("%d",&vi);
	pArr->pbase[pos-1]=vi;
	(pArr->cnt)++;
	return true;
}

bool delete_arr(struct Arr *pArr,int pos,int *pval)
{
    
    
	int i;
	if(is_empty(pArr))
		return false;
	if(pos<1||pos>pArr->cnt)
		return false;
	*pval=pArr->pbase[pos-1];
	for(i=pos;i<pArr->cnt;++i)
	{
    
    
		pArr->pbase[i-1]=pArr->pbase[i];
	}
	pArr->cnt--;
	return true;
}

void sort_arr(struct Arr *pArr)
{
    
    
	int i,j,t;

	for(i=0;i<pArr->cnt;++i)
	{
    
    
		for(j=i+1;j<pArr->cnt;++j)
		{
    
    
			if(pArr->pbase[i]>pArr->pbase[j])
			{
    
    
				t=pArr->pbase[i];
				pArr->pbase[i]=pArr->pbase[j];
				pArr->pbase[j]=t;
			}
		}
	}
	printf("按顺序排列后的结果为:");
}

void show_arr(struct Arr * pArr)
{
    
    
	int i;
	if( is_empty(pArr ) )//判断是否为空
	{
    
    
		printf("目前数组为空!\n");
	}
		
	else
	{
    
    
		printf("数组为:{");
		for(i=0;i<pArr->cnt ;++i)
		{
    
    
			printf("%d,",pArr->pbase [i]);
		}
		printf("}\n");
	}
	
}

bool is_empty(struct Arr * pArr)//bool is_empty(int i),但这样无实际意义了
{
    
    
	if(0==pArr->cnt )			//if(0==i)
		return true;
	else
		return false;
}

bool is_full(struct Arr * pArr)
{
    
    
	if(pArr->cnt==pArr->len)
		return true;
	else
		return false;
}

Guess you like

Origin blog.csdn.net/weixin_46242909/article/details/108151572