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


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

Java数据结构和算法(二)——数组

Java数据结构和算法(二)——数组
  • iaiti
  • iaiti
  • 2014年09月23日 23:59
  • 15002

挑战程序设计竞赛2 算法和数据结构 读后感

介绍 本篇主要是讲《挑战程序设计竞赛2 算法和数据结构》书的读后感和部分题目的再次解读、编程。包括书中的部分代码和一些个人的见解。如果想深入了解,建议去网上买一本回来看,比较适合学习算法的初学...
  • u013075699
  • u013075699
  • 2017年12月21日 22:22
  • 154

我的软考之路(四)——数据结构与算法(2)之树与二叉树

上篇博文主要介绍的是数据结构的线性结构,我们这篇博文介绍非线性结构—树与二叉树,我先介绍树的一些基本概念,树的遍历,再介绍二叉树相关概念和特性,以及二叉树的遍历,最后再树与二叉树的对比,总结。    ...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年04月25日 08:16
  • 9690

挑战程序设计竞赛 算法和数据结构 第8章 树

挑战程序设计竞赛 算法和数据结构 第8章 树 ALDS1_7_A:Rooted Tree 原书AC代码: #include using namespace std; #define MAX 1000...
  • mrcrack
  • mrcrack
  • 2017年09月20日 14:19
  • 241

【数据结构与算法01】数组

数组是应用最广泛的数据存储结构。它被植入到大部分的编程语言中,由于数组十分易懂,所以在这里就不赘述,主要附上两端代码,一个是普通的数组,另一个是有序数组。有序数组是按关键字升序(或降序)排列的,这种排...
  • eson_15
  • eson_15
  • 2016年04月11日 22:04
  • 3651

挑战程序设计竞赛 算法和数据结构 第6章 递归和分治法

挑战程序设计竞赛 算法和数据结构 第6章 递归和分治法 6.2穷举搜索 ALDS1_5_A:Exhaustive Search 原书AC代码: //ALDS1_5_A:Exhaustive Sear...
  • mrcrack
  • mrcrack
  • 2017年09月28日 10:45
  • 271

学习JavaScript数据结构与算法(第2版).pdf 免费下载

下载地址: 学习JavaScript数据结构与算法(第2版).pdf
  • jiongyi1
  • jiongyi1
  • 2018年01月10日 19:32
  • 202

typedef 数组 详解一目了然

typedef到处都是,但是能够真正懂得typedef使用的不算太多。对于初学者而言,看别人的源码时对到处充斥的typedef往往不知所错,而参考书又很少,所以在此给出一个源码,供大家参考   #...
  • kiddy19850221
  • kiddy19850221
  • 2011年08月03日 16:57
  • 1911

ExecuteNonQuery()返回值的几种情况

转:http://blog.sina.com.cn/s/blog_49df2d0b0100bfhb.html  在做一个程序的时候用到ExecuteNonQuery()执行 select,结果总是返...
  • xwdpepsi
  • xwdpepsi
  • 2012年01月06日 19:27
  • 712

Java数据结构与算法之Array数组

目录: 1.数组概述 2.java中数组的初始化 3.java中针对数组的API 4.数组排序 5.字符串转数组(char[]/int[]) 6.二维数组的操作 1.数组概述 数组是重要的数据...
  • qq_28057577
  • qq_28057577
  • 2016年09月30日 17:19
  • 2518
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构与算法(2)--数组和typedef的运用
举报原因:
原因补充:

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