从c小白开始自学数据结构——第一天【数组及其简单算法】
2018-01-18 17:21
369 查看
自学第一天,茫茫然一头雾水,不过对于连续储存数组的算法判断,插入,删除,排序这些比较基本的东西了解了许多。
吃饭去了,不bb,上代码
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//定义一个结构体
struct array
{
int* pBase; //数组首地址
int cnt; //有效个数
int len; //数组长度
};
void initialize_array(struct array *, int len); //初始化数组函数
bool is_empty(struct array *); //判断数组是否为空
bool is_full(struct array*); //判断数组是否已满
bool append_array(struct array*, int); //追加元素
bool insert_array(struct array*, int pos, int); //插入元素,pos指的是第pos个元素
bool delete_array(struct array*, int pos, int *);//删除元素,bool函数要返回一个值需要用指针
void inversion_array(struct array*); //倒置数组
void sort_array (struct array*); //排序
void out_array(struct array *); //输出数组
int main()
{
struct array Array;
initialize_array(&Array, 9);
out_array(&Array);
append_array(&Array, 1);
append_array(&Array, 21);
append_array(&Array, 3);
append_array(&Array, 48);
append_array(&Array, 56);
append_array(&Array, 62);
append_array(&Array, 7);
append_array(&Array, 87);
out_array(&Array);
insert_array(&Array, 1, 5);
out_array(&Array);
int val;
delete_array(&Array, 5, &val);
out_array(&Array);
printf("the %d is deleted\n", val);
inversion_array(&Array);
out_array(&Array);
sort_array (&Array);
out_array(&Array);
return 0;
}
void initialize_array(struct array * pArray, int len)
{
//确定长度动态分配空间并返回首地址
pArray->pBase = (int*)malloc(sizeof(int)*len);
if (NULL == pArray->pBase)
{
printf("Allocation failed");
exit(-1);//exit(0) 表示程序正常退出,exit⑴/exit(-1)表示程序异常退出。
}
else
{
pArray->len=len;
pArray->cnt=0;
}
return;
}
bool is_empty(struct array * pArray)
{
if (0 == pArray->cnt)
return true;
else
return false;
}
bool is_full(struct array* pArray)
{
if (pArray->cnt == pArray->len)
{
printf("Array is full.\n");
return false;
}
else
return true;
}
bool append_array(struct array* pArray, int val)
{
if ( is_full(pArray) == true)
{
pArray->pBase[pArray->cnt]=val;
pArray->cnt++;
}
else
{
return false;
}
return true;
}
bool insert_array(struct array* pArray, int pos, int val)
{
if ( is_full(pArray) ==false)
return false;
else if (pos<0 || pos > pArray->cnt)
return false;
else
{
for (int i = pArray->cnt; i>=pos; i-- )
//视屏中for (int i = pArray->cnt-1; i>=pos; i-- ) pArray->pBase[i+1] = pArray->pBase[i];但是如果这样写的话,输出的结果第pos+1个没有改变。
//是因为当i=3时,结束了,但是pArray->pBase[3+1] = pArray->pBase[3];即pArray->pBase[4] = pArray->pBase[3]是没有的,被漏掉了
//mb看错了视屏里的for是i>=pos-1。。。for (int i = pArray->cnt-1; i>=pos-1; i-- ) pArray->pBase[i+1] = pArray->pBase[i];是正确的
//i是下标,pos-1是数组最后一个元素的下标,思维就是后一个下标的元素等于这个下标的元素达到后移的目的,第七个等于第六个,第六个等于第五个
//本程序是第i个元素等于第i-1个元素达到后移的目的
//我还是喜欢我这个
{
pArray->pBase[i] = pArray->pBase[i-1];
}
pArray->pBase[pos-1] = val;
pArray->cnt ++;
return true;
}
}
bool delete_array(struct array* pArray, int pos, int* val)
{
if (pos<0 || pos>pArray->cnt)
{
printf("pos isn't in the pArray.\n");//bool函数中的printf是有效的
return false;
}
else if ( is_empty(pArray) )
{
printf("The array is empty");
return 0;
}
*val = pArray->pBase[pos-1];
for (int i=pos; i<pArray->cnt; i++)
pArray->pBase[i-1] = pArray->pBase[i];
pArray->cnt--;
return 1;
}
void inversion_array(struct array* pArray)//独立思考完成,礼貌合掌
{
int i=0, t, n;
n = pArray->cnt-1;
if ( is_empty(pArray) )
{
printf ("The array is empty");
}
while(n > i)
{
t = pArray->pBase
;
pArray->pBase
= pArray->pBase[i];
pArray->pBase[i] = t;
n--;
i++;
};
return;
}
void sort_array (struct array*pArray)
{
int i, j, k;
if ( is_empty(pArray) )
{
printf ("The array is empty");
}
for (i=0; i<pArray->cnt; i++)
for(j=i+1;j<pArray->cnt; j++)
if(pArray->pBase[i]<pArray->pBase[j])
{
k=pArray->pBase[j];
pArray->pBase[j]=pArray->pBase[i];
pArray->pBase[i]=k;
}
return;
}
void out_array(struct array * pArray)
{
if(is_empty(pArray))
printf("The array is empty\n");
else
for (int i=0; i<pArray->cnt; i++)
{
printf("Number %d is %d\n", i+1,pArray->pBase[i]);
}
printf("Valid number is %d \n\n", pArray->cnt);
return;
}
吃饭去了,不bb,上代码
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//定义一个结构体
struct array
{
int* pBase; //数组首地址
int cnt; //有效个数
int len; //数组长度
};
void initialize_array(struct array *, int len); //初始化数组函数
bool is_empty(struct array *); //判断数组是否为空
bool is_full(struct array*); //判断数组是否已满
bool append_array(struct array*, int); //追加元素
bool insert_array(struct array*, int pos, int); //插入元素,pos指的是第pos个元素
bool delete_array(struct array*, int pos, int *);//删除元素,bool函数要返回一个值需要用指针
void inversion_array(struct array*); //倒置数组
void sort_array (struct array*); //排序
void out_array(struct array *); //输出数组
int main()
{
struct array Array;
initialize_array(&Array, 9);
out_array(&Array);
append_array(&Array, 1);
append_array(&Array, 21);
append_array(&Array, 3);
append_array(&Array, 48);
append_array(&Array, 56);
append_array(&Array, 62);
append_array(&Array, 7);
append_array(&Array, 87);
out_array(&Array);
insert_array(&Array, 1, 5);
out_array(&Array);
int val;
delete_array(&Array, 5, &val);
out_array(&Array);
printf("the %d is deleted\n", val);
inversion_array(&Array);
out_array(&Array);
sort_array (&Array);
out_array(&Array);
return 0;
}
void initialize_array(struct array * pArray, int len)
{
//确定长度动态分配空间并返回首地址
pArray->pBase = (int*)malloc(sizeof(int)*len);
if (NULL == pArray->pBase)
{
printf("Allocation failed");
exit(-1);//exit(0) 表示程序正常退出,exit⑴/exit(-1)表示程序异常退出。
}
else
{
pArray->len=len;
pArray->cnt=0;
}
return;
}
bool is_empty(struct array * pArray)
{
if (0 == pArray->cnt)
return true;
else
return false;
}
bool is_full(struct array* pArray)
{
if (pArray->cnt == pArray->len)
{
printf("Array is full.\n");
return false;
}
else
return true;
}
bool append_array(struct array* pArray, int val)
{
if ( is_full(pArray) == true)
{
pArray->pBase[pArray->cnt]=val;
pArray->cnt++;
}
else
{
return false;
}
return true;
}
bool insert_array(struct array* pArray, int pos, int val)
{
if ( is_full(pArray) ==false)
return false;
else if (pos<0 || pos > pArray->cnt)
return false;
else
{
for (int i = pArray->cnt; i>=pos; i-- )
//视屏中for (int i = pArray->cnt-1; i>=pos; i-- ) pArray->pBase[i+1] = pArray->pBase[i];但是如果这样写的话,输出的结果第pos+1个没有改变。
//是因为当i=3时,结束了,但是pArray->pBase[3+1] = pArray->pBase[3];即pArray->pBase[4] = pArray->pBase[3]是没有的,被漏掉了
//mb看错了视屏里的for是i>=pos-1。。。for (int i = pArray->cnt-1; i>=pos-1; i-- ) pArray->pBase[i+1] = pArray->pBase[i];是正确的
//i是下标,pos-1是数组最后一个元素的下标,思维就是后一个下标的元素等于这个下标的元素达到后移的目的,第七个等于第六个,第六个等于第五个
//本程序是第i个元素等于第i-1个元素达到后移的目的
//我还是喜欢我这个
{
pArray->pBase[i] = pArray->pBase[i-1];
}
pArray->pBase[pos-1] = val;
pArray->cnt ++;
return true;
}
}
bool delete_array(struct array* pArray, int pos, int* val)
{
if (pos<0 || pos>pArray->cnt)
{
printf("pos isn't in the pArray.\n");//bool函数中的printf是有效的
return false;
}
else if ( is_empty(pArray) )
{
printf("The array is empty");
return 0;
}
*val = pArray->pBase[pos-1];
for (int i=pos; i<pArray->cnt; i++)
pArray->pBase[i-1] = pArray->pBase[i];
pArray->cnt--;
return 1;
}
void inversion_array(struct array* pArray)//独立思考完成,礼貌合掌
{
int i=0, t, n;
n = pArray->cnt-1;
if ( is_empty(pArray) )
{
printf ("The array is empty");
}
while(n > i)
{
t = pArray->pBase
;
pArray->pBase
= pArray->pBase[i];
pArray->pBase[i] = t;
n--;
i++;
};
return;
}
void sort_array (struct array*pArray)
{
int i, j, k;
if ( is_empty(pArray) )
{
printf ("The array is empty");
}
for (i=0; i<pArray->cnt; i++)
for(j=i+1;j<pArray->cnt; j++)
if(pArray->pBase[i]<pArray->pBase[j])
{
k=pArray->pBase[j];
pArray->pBase[j]=pArray->pBase[i];
pArray->pBase[i]=k;
}
return;
}
void out_array(struct array * pArray)
{
if(is_empty(pArray))
printf("The array is empty\n");
else
for (int i=0; i<pArray->cnt; i++)
{
printf("Number %d is %d\n", i+1,pArray->pBase[i]);
}
printf("Valid number is %d \n\n", pArray->cnt);
return;
}
相关文章推荐
- 从小白开始自学数据结构——第四、五天【栈及其基本操作】
- 从小白开始自学数据结构——第十二天【图及其基本概念和邻接表的定义】
- 从小白开始自学数据结构——第十三天【简单选择排序】
- flag1本人技术小白,自学了数据结构,现在自学算法,给自己立一个flag争取每天学会一个算法,欢迎大家监督打脸!!!!
- 从小白开始自学数据结构——第八天【串】
- 从c小白开始自学数据结构——第二天【链表开始】
- 从c小白开始自学数据结构——第三天【链表的基本操作】
- 【郝斌数据结构自学笔记】12-13_连续存储数组的算法演示
- 从小白开始自学数据结构——第九天【树的基本概念和定义】
- 【数据结构&&算法系列】堆排序简单介绍及其实现
- 从小白开始自学数据结构——树的遍历
- 从小白开始自学数据结构——第六天【队列】
- 小白学数据结构——零、算法初步(算法分类及最大子数组小试牛刀)
- 从小白开始自学数据结构——第十一天【线索二叉树】
- 一个简单的实现找出数组中一个数字出现次数最多的数字的算法
- 数据结构与算法之整体有序数组的查找
- 浙江中医药大学-《数据结构》-串、数组算法设计
- 算法求解中的变量、数组与数据结构(STL 中的容器)
- 数据结构和算法之数组奇数、偶数分离
- *第十五周*数据结构实践项目一【验证哈希表及其算法】