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

本文详细介绍了使用C语言实现数组初始化、追加、插入、删除、显示、倒置和排序的操作,并通过实例展示了如何应用这些操作来管理数组元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include<stdio.h> #include<stdbool.h> #include<stdlib.h> //包含了exit函数 //定义了一个数据类型 struct Arr { int * pBase;//存储的是数组第一个元素的地址 int len;//数组所能容纳 的最大元素的个数 int cnt;//当前数组有效元素的个数 }; void init_arr(struct Arr *, int); bool append_arr(struct Arr * pArr, int val);//追加 bool insert_arr(struct Arr * pArr, int pos, int val);//pos的值从一开始 bool delete_arr(struct Arr * pArr, int pos, int * pval); int get(); bool is_empty(struct Arr * pArr); bool is_full(struct Arr * pArr); void sort_arr(struct Arr * pArr); void show_arr(struct Arr * pArr); void inversion_arr(struct Arr * pArr); int main(void) { struct Arr arr; int val; init_arr(&arr, 6); show_arr(&arr); append_arr(&arr, 1); append_arr(&arr, 10); append_arr(&arr, -3); append_arr(&arr, 6); append_arr(&arr, 88); append_arr(&arr, 11); if (delete_arr(&arr, 4, &val)) { printf("删除成功!\n"); printf("你删除的元素是:%d\n",val); } else { printf("删除失败!\n"); } /* append_arr(&arr, 2); append_arr(&arr, 3); append_arr(&arr, 4); append_arr(&arr, 5); insert_arr(&arr, 6, 99); append_arr(&arr, 6); append_arr(&arr, 7); if(append_arr(&arr, 8)) { printf("追加成功\n"); } else { printf("追加失败!\n"); } */ show_arr(&arr); inversion_arr(&arr); printf("倒置之后的数组内容是:\n"); show_arr(&arr); sort_arr(&arr); show_arr(&arr); //printf("%d\n",arr.len); return 0; } void init_arr(struct Arr *pArr, int length) { pArr->pBase = (int *)malloc(sizeof(int)*length); if(NULL == pArr->pBase) { printf("动态内存分配失败!\n"); exit(-1);//终止整个程序 } else { pArr->len = length; pArr->cnt = 0; } return; } bool is_empty(struct Arr * pArr) { if(0 == pArr->cnt) return true; else return false; } bool is_full(struct Arr * pArr) { if(pArr->cnt == pArr->len) return true; else return false; } void show_arr(struct Arr * pArr) { int i; if(is_empty(pArr))//注意这里!! { printf("数组为空!\n"); } else { for(i = 0; i<pArr->cnt; i++) printf("%d ", pArr->pBase[i]);//int * printf("\n"); } } bool append_arr(struct Arr * pArr, int val) { //满是返回false if(is_full(pArr)) return false; //不满时追加 pArr->pBase[pArr->cnt] = val; (pArr->cnt)++; return true; } bool insert_arr(struct Arr * pArr, int pos, int val) { int i; if(is_full(pArr)) return false; if(pos<1 || pos>pArr->cnt+1)// return false; for(i=pArr->cnt-1; i>=pos-1; --i) { pArr->pBase[i+1] = pArr->pBase[i]; } pArr->pBase[pos-1] = val; (pArr->cnt)++; return true; } bool delete_arr(struct Arr * pArr, int pos, int * pval) { int i; if(is_empty(pArr)) return false; if(pos<1 || pos>pArr->cnt) return false; *pval = pArr->pBase[pos-1]; for(i=pos; i<pArr->cnt; ++i) { pArr->pBase[i-1] =pArr->pBase[i]; } pArr->cnt--; return true; } 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; } } void sort_arr(struct Arr * pArr) { int i, j,t; for(i=0; i<pArr->cnt; ++i) { for(j=i+1; j<pArr->cnt; ++j) { if(pArr->pBase[i] > pArr->pBase[j]) { t = pArr->pBase[i]; pArr->pBase[i] = pArr->pBase[j]; pArr->pBase[j] = t; } } } }

  

转载于:https://www.cnblogs.com/huangtao1996/p/4779182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值