#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; } } }
相关推荐
- **指针数组和数组指针**:学习这两种特殊的指针用法。 4. **结构体**: - **结构体定义**:如何创建包含多种类型数据的结构体类型。 - **结构体变量的声明与初始化**:声明结构体变量并为其成员赋值。 - **...
整理的一些关于C语言的练习题,题目答案都有,需要的可以下载看一下
本课程聚焦于C语言中的核心概念,包括数组、指针和结构体,这些都是理解和编写C程序的关键。 首先,让我们深入探讨数组。数组是C语言中存储多个相同类型数据的一种方式。你可以将其想象为一个连续的内存空间,每个...
"C语言试卷练习(函数、循环、指针、结构体)" 本试卷练习涵盖了C语言中函数、循环、指针和结构体等基本概念和应用。通过解决这些问题,学生可以巩固自己的编程基础,提高编程能力和逻辑思维能力。 1. 转义字符是...
在"PointTest"这个压缩包文件中,可能包含了关于指针和结构体使用的练习题目或者测试案例,你可以通过解压并运行这些文件来加深理解和实践。记住,理论学习是基础,但实践才能真正巩固和提升你的技能。
结构体练习题PPT学习教案 本资源摘要信息主要涉及结构体的练习题和学习教案,内容涵盖结构体的定义、结构体数组、结构体指针、结构体成员的访问等多方面的知识点。 1. 结构体的定义 在C语言中,结构体是一种复杂的...
5. **C语言数组**:数组是存储同一类型数据集合的结构,学习者会学习如何声明、初始化和操作数组,以及一维、二维数组的应用。 6. **C语言循环控制**:循环是重复执行一段代码直到满足特定条件的过程。学习者会接触...
19. 结构体指针数组:在C语言中,结构体指针数组可以用于实现结构体指针的数组化。结构体指针数组需要注意结构体指针数组的定义和使用方法。 20. 函数指针数组:在C语言中,函数指针数组可以用于实现函数指针的数组...
2. 指针数组:可以声明指向数组的指针,如`int (*p)[5];`,`p`是一个指向含有5个整数的数组的指针。 3. 多级指针:可以声明指向指针的指针,如`int **pp;`,`pp`是一个指向指针的指针,可用于处理多级结构。 四、...
通过深入学习C指针,你可以更好地理解内存管理,提高程序性能,并掌握高级编程技巧,如指针运算和指针数组等。 结构体是C语言中组织数据的强大工具,它允许我们将不同类型的数据组合成一个单一的复合类型。结构体在...
总结,本实验旨在通过实际编程练习,加深对C语言中指针、结构体、数组指针以及字符串指针的理解和应用,同时也涵盖了函数的使用、内存管理和程序流程控制等多个核心概念。通过这三个问题的解决,学生可以全面掌握...
函数接受一个`Date`结构体作为参数,并通过一个整型指针`q`返回计算的结果。在`days`函数内部,先判断是否为闰年,然后根据月份计算出到当前日期为止的总天数。主函数`main`负责获取用户输入的日期,调用`days`函数...
8. **指针与结构体**:讲解如何使用指针操作结构体,包括结构体指针的声明和使用,以及结构体数组和结构体指针数组。 9. **安全使用指针**:强调指针使用的注意事项,如避免空指针引用,防止内存泄漏,以及理解野...
这些文档可能涉及指针的高级用法,如指针数组、多级指针、指针作为函数返回值,以及结构体的动态分配和释放、结构体指针在函数间的传递等进阶主题。 JWXL7-1、JWXL7-2 和 JWXL7-3 很可能是实验的预备知识或参考资料...
4. **结构体数组指针**:一个指针可以指向结构体数组的首地址,使得可以一次性处理多个结构体。 通过理解和熟练掌握指针和结构体,程序员可以在C语言中构建复杂的程序,实现高效的数据管理和算法设计。在实际编程中...
在这个名为“使用结构体数组和指针实现的命令行人员信息管理系统”的项目中,我们主要探讨的是如何利用C++编程语言来构建一个简单的信息管理系统。这个系统是在命令行环境下运行的,通过结构体数组和指针来存储和...
【火车订票系统 结构体 + 数组版 / 结构体 + 链表版】是一种常见的编程练习,旨在帮助初学者理解C语言中的数据结构和算法应用。在这个项目中,我们将探讨如何利用C语言来设计一个简单的火车订票系统,它会涉及到...
7. 结构体数组和结构体指针数组:处理包含多个结构体的数组。 8. 构造函数和析构函数:在C++中,如何为结构体(类)定义构造函数和析构函数。 9. 继承和多态:在C++中,如何创建派生类并利用多态性实现代码复用和...
通讯录管理系统是一个常见的编程练习,通常用于教学C++语言中的数据结构、指针操作以及函数的应用。在这个系统中,我们可以通过一系列操作管理个人联系人信息,包括添加、显示、删除、修改和清空联系人记录。以下是...
结构体也可以被用作数组元素,创建结构体数组可以存储多个具有相同结构的数据。例如: ```c struct student arr[10]; ``` 11.3 结构体指针 结构体指针用于指向结构体变量的地址,可以用来间接访问结构体成员。定义...