关闭

数据结构与算法(2)--数组和typedef的运用

标签: 算法数据结构typedef数组
164人阅读 评论(0) 收藏 举报
分类:

1.模拟数组增删改查的源码

#include<stdio.h>
#include<stdlib.h>//包含了exit()函数
#include<malloc.h>
#include<windows.h>
struct Arr{       //定义了一个数据类型
	int *pBase;  //存储的是数组第一个元素的地址
	int len; //数组所能容纳的最大元素的个数
	int cnt; //当前数组有效元素的个数
};

void init_arr(struct Arr * pArr,int length);   //初始化
bool is_empty(struct Arr * pArr);
void show_arr(struct Arr * pArr);
bool append_arr(struct Arr * pArr,int val); //追加
bool is_full(struct Arr * pArr);
bool insert_arr(struct Arr * pArr,int pos,int val); //帮助文档:1.各个参数的含义,2.返回的是什么
bool delete_arr(struct Arr * pArr,int pos,int * pVal);
void inversion_arr(struct Arr * pArr);  //倒置
void sort_arr(struct Arr * pArr);  //排序


int main(void){
struct Arr arr;
int val;
init_arr(&arr,6);  //把一个arr的值赋给另一个arr
append_arr(&arr,1);
append_arr(&arr,3);
append_arr(&arr,4);
insert_arr(&arr,3,99);

if(delete_arr(&arr,4,&val)){
	printf("您删除的元素是:");
	printf("%d\n",val);
}
show_arr(&arr);
inversion_arr(&arr);
printf("倒置:  ");
show_arr(&arr);
sort_arr(&arr);
printf("排序:  ");
show_arr(&arr);
return 0;
}
void init_arr(struct Arr * pArr,int length){

	(*pArr).len=99;
	pArr->pBase=(int *)malloc(sizeof(int)*length);//malloc返回的是第一个字节的地址,赋给pBase,pBase是整形的,刚好指向了前4个字节
if(NULL==pArr->pBase){              //pBase如果分配成功即为有效内存地址,如果分配不成功(比如内存已满),则会把NULL赋值给pBase
	printf("动态内存分配失败!\n");
	exit(-1);
	}
	else{
	pArr->len=length;
	pArr->cnt=0;

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

	}


	bool is_full(struct Arr * pArr){
	
if((*pArr).len==(*pArr).cnt)
return true;
	}

	void show_arr(struct Arr * pArr){
	
		int i;
		if(is_empty(pArr)==true)  {//show_arr中已将 &arr赋值给pArr,此时pArr中存放的已是&arr,所以可以直接将pArr赋值传入is_empty();
		printf("数组为空!\n");
		}
			for(i=0;i<=pArr->cnt;i++){
   printf("show_arr=%d  ",(*pArr).pBase[i]);  //pBase存储的是第一个元素的地址

			}
			printf("\n\n\n");
	}
	bool append_arr(struct Arr * pArr,int val){
		//int i;
	if(is_full(pArr)){
        pArr->pBase[pArr->cnt]=val;
		(pArr->cnt)++;
	}
	/*for(i=0;i<pArr->cnt;i++){
		
		printf("append_arr===%d\n",(*pArr).pBase[i]);  //pBase存储的是第一个元素的地址
	}*/
	if(is_full(pArr)){
        return false;  //满了就返回false
	}
	
	}
	bool insert_arr(struct Arr * pArr,int pos,int val){   //pos:插入的位置,从1开始算起;val:要插入的的数据
int i;
if(is_full(pArr)==true){
	printf("已满,不可插入");
		return false;
}
if(pos<1||pos>pArr->cnt){
printf("请插入到正确位置");
	return false;

}
for(i=pArr->cnt-1;i>=pos-1  ;i--){
pArr->pBase[i+1]=pArr->pBase[i];
}
pArr->pBase[pos-1]=val;
return true;

	}
	bool delete_arr(struct Arr * pArr,int pos,int * pVal){
	int i;
		if(is_empty(pArr)==true){
printf("数组为空,不可删除");
return false;
		}
		if(pos<1||pos>(pArr->cnt)){
printf("超出界限了");
return false;
		}
		*pVal=pArr->pBase[pos-1];
		for(i=pos;i<pArr->cnt;i++){
pArr->pBase[i-1]=pArr->pBase[i];

		}
	pArr->cnt--;
	}
	void inversion_arr(struct Arr * pArr){
	int i=0;
	int j=pArr->cnt-1;
	int t;
		while(i<j){
t=pArr->pBase[i];
pArr->pBase[i]=pArr->pBase[j];
pArr->pBase[j]=t;
++i;
--j;

		}
return ;

	}

	void sort_arr(struct Arr * pArr){
		int i,j,t;
		for(i=0;i<(pArr->cnt)-1;i++){          //冒泡排序
			for(j=0;j<(pArr->cnt)-1-i;j++){
				if(pArr->pBase[j]>pArr->pBase[j+1]){
t=pArr->pBase[j];
pArr->pBase[j]=pArr->pBase[j+1];
pArr->pBase[j+1]=t;

				}

			}
		}

return ;

	}

2.typedef的用法简介

语法:typedef   类型名  别名;
如 typedef int p;   //int i=1; 等价于 p i=1;     
#include<stdio.h>
#include<string.h>
typedef	struct Student{  
		int sid;
	}* pSTU,STU;

int main(){
STU Stu;
pSTU STu=&Stu;
STu->sid=21;
STu->sex='m';
printf("%d\n",STu->sid);
return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20525次
    • 积分:472
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:4篇
    • 译文:0篇
    • 评论:1条