`
Jw.mac
  • 浏览: 11098 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

指针 数组 结构体 练习

    博客分类:
  • c
 
阅读更多
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdbool.h>
//简单数组存储 gcc下运行
//J.WANG 2013-6-8
typedef struct Arr{
	int * data; //存储数组的第一个元素的地址
	int len;  //数组的存储长度
	int index; //有效元素个数
} ARR;

bool init(ARR *p,int n); //初始存储,p要初始对象的地址,n初始的长度
bool append(ARR *p,int val); //添加元素,p添加的对象,val要增加的值
void printArr(ARR *p); //打印数组
bool isFull(ARR *p); //数组是否有足够的空间
void reverse(ARR *p); //反转数组
bool delete(ARR *p,int val); //删除数组中第一个出现的指定元素
void sort(ARR *p); //排序
bool insert(ARR *p,int pos,int val); //插入数据
bool isEmpty(ARR *p); //判断数组是否为空
int main(){
	ARR arr;
	init(&arr,12);
	//插入数据
	append(&arr,32);
	append(&arr,22);
	append(&arr,1);
	append(&arr,-1);
	append(&arr,0);
	append(&arr,0);
	append(&arr,6);
	append(&arr,55);
	append(&arr,1011);
	append(&arr,23);
	append(&arr,88);
	append(&arr,22);
	//删除
	delete(&arr,22);
	delete(&arr,22);
	delete(&arr,1);
	
	printf("-------输出数据----\n");
	printArr(&arr);
	printf("-------反转数据----\n");
	reverse(&arr); //反转
	printArr(&arr);
	printf("-------排序后数据----\n");
	sort(&arr);	   //排序
	printArr(&arr);
	return 0;
}
//初始数组
bool init(ARR * p,int n){
	if(0<n){
		p->data=(int *)malloc(sizeof(int)*n);
		if(p->data==NULL){
			printf("初始化失败.\n");
			return false;
		}else{
			p->index=0;
			p->len=n;
			return true;
		}
	}
	return false;
}
//判断数组是否已满
	bool isFull(ARR *p){
		if(isEmpty(p)){
			printf("isFull数组为空.\n");
			return false;
		}
		//有效元素个数大于等于数组长度,数组已满
		if(p->len<=p->index)
			return true;
		else	
			return false;
	}
//增加
bool append(ARR * p,int val){
	if(isFull(p)){
		printf("append没有足够空间存储.%d\n",val);
		return false;
	}
	p->data[p->index]	= val;
	p->index++;
	return true;
}
//打印
void  printArr(ARR *p){
	int i;
	for(i=0;i<p->len;i++){
		printf("%d\n",p->data[i]);
	}
	printf("\n");
}

//是否为空
	bool isEmpty(ARR *p){
		if(p==NULL||p->len==0)
			return true;
		else 
			return false;
	}
//插入数据
bool insert(ARR *p,int pos,int val){
	int i;
	if(pos<1){
		printf("insert无效的位置.\n");
		return false;
	}
	if(isEmpty(p)){
		return false;
	}
	if(p->len-1<p->index){
		printf("insert没有足够的空间存储数据.\n");
		return false;
	}
	//每个元素向后移1位
	for(i=p->len-1;i>=pos;i--){
		p->data[i]=p->data[i-1];
	}
	//插入值
	p->data[pos-1]=val; 
	p->index++; 
	return true;
}
//删除数组中第一个出现的指定的元素
bool delete(ARR *p,int val){
	int i;
	if(isEmpty(p)){
		printf("delete数组为空!\n");
		return false;
	}
	//找到第一个出现的指定元素
	for(i=0;i<p->len&&!(p->data[i]==val);i++); //标记: !的优先级比==高
	//每个元素向前移动1位
	for(;i<p->len-1;i++){
		p->data[i]=p->data[i+1];
	}	
	p->index--;
	p->len--;
	return true;
}
//反转数组
void  reverse(ARR *p){
	if(isEmpty(p)){
		printf("reverse数组为空!\n");
		return;
	}
	int i=0,j=p->len-1,m=(p->len)/2,t;
	while(0 < m){
		t=p->data[i];
		p->data[i]=p->data[j];
		p->data[j]=t;
		i++;
		j--;
		m--;
	}
}
//选择排序 
void sort(ARR *p){
	if(isEmpty(p)){
		printf("sort数组为空!\n");
		return;
	}
	int i,j,min,tmp;
	for(i=0;i<p->len;i++){  //遍历所有元素
		min=i;
		for(j=i+1;j<p->len;j++){  //从所有元素里找出最小的元素下标
			if(p->data[min]>p->data[j]){
				min=j;
			}
		}
		if(min!=i){
			tmp=p->data[i];
			p->data[i]=p->data[min];
			p->data[min]=tmp;
		}
	}

}

 

 

  • 大小: 15.5 KB
分享到:
评论

相关推荐

    C语言试题集(包括基础概念、函数、指针、结构体等等)

    - **指针数组和数组指针**:学习这两种特殊的指针用法。 4. **结构体**: - **结构体定义**:如何创建包含多种类型数据的结构体类型。 - **结构体变量的声明与初始化**:声明结构体变量并为其成员赋值。 - **...

    C语言题库数组,指针,结构体,链表习题

    整理的一些关于C语言的练习题,题目答案都有,需要的可以下载看一下

    C语言课程 数组 指针 结构体

    本课程聚焦于C语言中的核心概念,包括数组、指针和结构体,这些都是理解和编写C程序的关键。 首先,让我们深入探讨数组。数组是C语言中存储多个相同类型数据的一种方式。你可以将其想象为一个连续的内存空间,每个...

    C语言试卷练习(函数,循环,指针,结构体)

    "C语言试卷练习(函数、循环、指针、结构体)" 本试卷练习涵盖了C语言中函数、循环、指针和结构体等基本概念和应用。通过解决这些问题,学生可以巩固自己的编程基础,提高编程能力和逻辑思维能力。 1. 转义字符是...

    C语言的指针使用与结构体的使用

    在"PointTest"这个压缩包文件中,可能包含了关于指针和结构体使用的练习题目或者测试案例,你可以通过解压并运行这些文件来加深理解和实践。记住,理论学习是基础,但实践才能真正巩固和提升你的技能。

    结构体练习题PPT学习教案.pptx

    结构体练习题PPT学习教案 本资源摘要信息主要涉及结构体的练习题和学习教案,内容涵盖结构体的定义、结构体数组、结构体指针、结构体成员的访问等多方面的知识点。 1. 结构体的定义 在C语言中,结构体是一种复杂的...

    C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数

    5. **C语言数组**:数组是存储同一类型数据集合的结构,学习者会学习如何声明、初始化和操作数组,以及一维、二维数组的应用。 6. **C语言循环控制**:循环是重复执行一段代码直到满足特定条件的过程。学习者会接触...

    C语言程序设计期末练习题及答案.doc

    19. 结构体指针数组:在C语言中,结构体指针数组可以用于实现结构体指针的数组化。结构体指针数组需要注意结构体指针数组的定义和使用方法。 20. 函数指针数组:在C语言中,函数指针数组可以用于实现函数指针的数组...

    指针 指针教程 指针练习

    2. 指针数组:可以声明指向数组的指针,如`int (*p)[5];`,`p`是一个指向含有5个整数的数组的指针。 3. 多级指针:可以声明指向指针的指针,如`int **pp;`,`pp`是一个指向指针的指针,可用于处理多级结构。 四、...

    非常好的C语言巩固学习资料,对于提升C语言能力很有帮助,尤其详细介绍了C指针,结构体等重点

    通过深入学习C指针,你可以更好地理解内存管理,提高程序性能,并掌握高级编程技巧,如指针运算和指针数组等。 结构体是C语言中组织数据的强大工具,它允许我们将不同类型的数据组合成一个单一的复合类型。结构体在...

    C语言实验报告之指针、结构体等综合程序设计.doc

    总结,本实验旨在通过实际编程练习,加深对C语言中指针、结构体、数组指针以及字符串指针的理解和应用,同时也涵盖了函数的使用、内存管理和程序流程控制等多个核心概念。通过这三个问题的解决,学生可以全面掌握...

    c语言结构体练习[借鉴].pdf

    函数接受一个`Date`结构体作为参数,并通过一个整型指针`q`返回计算的结果。在`days`函数内部,先判断是否为闰年,然后根据月份计算出到当前日期为止的总天数。主函数`main`负责获取用户输入的日期,调用`days`函数...

    一份不错的C语言指针教程.rar_c语言指针

    8. **指针与结构体**:讲解如何使用指针操作结构体,包括结构体指针的声明和使用,以及结构体数组和结构体指针数组。 9. **安全使用指针**:强调指针使用的注意事项,如避免空指针引用,防止内存泄漏,以及理解野...

    3120224602226-温小镭-实验7.rar.rar

    这些文档可能涉及指针的高级用法,如指针数组、多级指针、指针作为函数返回值,以及结构体的动态分配和释放、结构体指针在函数间的传递等进阶主题。 JWXL7-1、JWXL7-2 和 JWXL7-3 很可能是实验的预备知识或参考资料...

    第7-8章指针和结构(练习题).rar

    4. **结构体数组指针**:一个指针可以指向结构体数组的首地址,使得可以一次性处理多个结构体。 通过理解和熟练掌握指针和结构体,程序员可以在C语言中构建复杂的程序,实现高效的数据管理和算法设计。在实际编程中...

    使用结构体数组和指针实现的命令行人员信息管理系统.zip

    在这个名为“使用结构体数组和指针实现的命令行人员信息管理系统”的项目中,我们主要探讨的是如何利用C++编程语言来构建一个简单的信息管理系统。这个系统是在命令行环境下运行的,通过结构体数组和指针来存储和...

    火车订票系统 [结构体 + 数组版]/[结构体 + 链表版]

    【火车订票系统 结构体 + 数组版 / 结构体 + 链表版】是一种常见的编程练习,旨在帮助初学者理解C语言中的数据结构和算法应用。在这个项目中,我们将探讨如何利用C语言来设计一个简单的火车订票系统,它会涉及到...

    C_C语言_C-C++_

    7. 结构体数组和结构体指针数组:处理包含多个结构体的数组。 8. 构造函数和析构函数:在C++中,如何为结构体(类)定义构造函数和析构函数。 9. 继承和多态:在C++中,如何创建派生类并利用多态性实现代码复用和...

    通讯录管理系统:结构体,指针,函数

    通讯录管理系统是一个常见的编程练习,通常用于教学C++语言中的数据结构、指针操作以及函数的应用。在这个系统中,我们可以通过一系列操作管理个人联系人信息,包括添加、显示、删除、修改和清空联系人记录。以下是...

    第十一章 结构体和.ppt

    结构体也可以被用作数组元素,创建结构体数组可以存储多个具有相同结构的数据。例如: ```c struct student arr[10]; ``` 11.3 结构体指针 结构体指针用于指向结构体变量的地址,可以用来间接访问结构体成员。定义...

Global site tag (gtag.js) - Google Analytics