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

原创 2015年11月20日 18:38:26

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

郝斌数据结构  13  连续存储数组的算法演示_2

#include #include #include #include struct Arr //定义了一个数据类型,该数据类型名字叫struct Arr { int *pBase;//...

算法与数据结构面试题(14)-在数组中查找2个数的和为已知数

题目 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。...

Java数据结构和算法系列2--数组

1.介绍Java最常用的数据结构就是数组了,Java中得数组有2种数据类型:基本类型(如int,long)和对象类型。在许多编程语言中数组是基本类型,但在Java中把它们当做对象来对待,因此在创建数组...

数据结构与算法(javascript描述)——2. 数组

数据结构与算法(javascript描述)——2.数组

《Java数据结构与算法》笔记-CH2无序数组

/** * 本章目标: * 1.自制数组类 * 2.有序数组:按关键字升降序排列;二分法查找 * 3.分析有序数组。大O表示法 */ /** * 自制数组类 书中有的地方有...

数据结构与算法分析笔记与总结(java实现)--数组2:旋转数组的最小数字

数据结构与算法分析笔记与总结(java实现)--数组2:旋转数组的最小数字

再回首,数据结构——字符串与数组的常见操作(链式存储,包含朴素匹配算法等)

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。          希望这些能提供给初学者一些参考。 //鏈式存儲的數據結構 typedef struc...

javascript数据结构和算法 第二章 (数组)

数组是计算机编程中最为常见的数据结构.每一种编程语言都包括某种形式的数组.因为它们是内置的所以它们非常高效,往往被用来作为存储数据的选择. 这一章,我们将会研究数组在javascript中是如何工作...

Java数据结构与算法之数组排序——冒泡

冒泡排序很简单,根据图形来记算法,非常容易。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)