数据结构与算法(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;
}


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

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

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

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

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

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

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

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

#include #include #include #include struct Arr //定义了一个数据类型,该数据类型名字叫struct Arr { int *pBase;//...
  • asty008
  • asty008
  • 2016年12月20日 16:53
  • 225

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

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

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

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

数据结构学习笔记(2)_一维数组及其简单运用

不知不觉大学过了三年,最遗憾的就是在大二没把《数据结构》和《算法》这两门课程学好~~~ 现在每天花一点时间把这两个内容回顾一下,算是给自己的一点目标吧! 数组(Array): 数组算是最简单的也...

《算法导论》学习笔记之Chapter10基本数据结构---栈的数组实现

下面用数组实现栈的代码: public class Stack { /** * 本类是利用数组实现的栈类,实现的功能包括: 栈是否为空;是否为满;压入;弹出;peek;得到栈大小数;栈顶位置...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构与算法(2)--数组和typedef的运用
举报原因:
原因补充:

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