鱼C论坛

 找回密码
 立即注册

连续存储[数组]

已有 516 次阅读2012-8-13 23:39 |个人分类:数据结构

/*
**time:2012.4.26 15:48
**writer:神的现身
**main:结构体,动态内存,函数,底层
**function:连续存储[数组]
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Arr
{
int * pBase;
int len;
int cnt;
}ARR,*PARR;
void init_arr(PARR, int);
bool is_empty(PARR);
void show_arr(PARR);
bool is_full(PARR);
bool append_arr(PARR,int);
bool insert_arr(PARR,int , int );
bool delect_arr(PARR,int , int*);
void inversion_arr(PARR);
void sort_arr(PARR);
int main(void)
{
int val;
ARR arr;
init_arr(&arr,6);
append_arr(&arr,6);
append_arr(&arr,2);
append_arr(&arr,3);
append_arr(&arr,-4);
append_arr(&arr,65);
show_arr(&arr);
printf("在第5个位置插入0后为:\n");
insert_arr(&arr,5,0);
show_arr(&arr);
delect_arr(&arr,5,&val);
printf("你删除的数为:%d\n",val);
show_arr(&arr);
printf("倒置后为:\n");
inversion_arr(&arr);
show_arr(&arr);
printf("排序后为:\n");
sort_arr(&arr);
show_arr(&arr);
return 0;
}
void init_arr(PARR pArr, int length)
{
pArr->pBase = (int *)malloc(sizeof(int) * length);
if(NULL ==pArr)
{
printf("动态分配失败");
exit(-1);
}else{
pArr->cnt = 0;
pArr->len = length;
printf("完成初始化\n");
}
return;
}
bool is_empty(PARR pArr)
{
if(0 == pArr->cnt)
return true;
else
return false;
}
void show_arr(PARR pArr)
{
int i;
if(is_empty(pArr))
{
printf("数组为空\n");
return;
}else{

for(i=0; i<pArr->cnt; ++i)
printf("%d ",pArr->pBase[i]);
printf("\n");

}
return;
}
bool is_full(PARR pArr)
{
if(pArr->len == pArr->cnt)
return true;
else
return false;
}
bool append_arr(PARR pArr,int val)
{
if(is_full(pArr))
return false;
else{
pArr->pBase[pArr->cnt] = val;
++pArr->cnt;
return true;
}
}
bool insert_arr(PARR pArr,int pos, int val)
{
if(is_full(pArr))
return false;
if(1 > pos || pArr->cnt+1 < pos)
{
return false;
}
else{
for(int 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 delect_arr(PARR pArr,int pos, int* val)
{
if(is_empty(pArr))
return false;
if(1 > pos || pArr->cnt < pos)
return false;
*val = pArr->pBase[pos-1] ;
for(int i = pos-1; i<pArr->cnt; ++i)
pArr->pBase[i] = pArr->pBase[i+1];
pArr->cnt--;
return true;
}
void inversion_arr(PARR 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(PARR pArr)
{
int j,i,t,flag=1;
for(i=0; i < pArr->cnt-1 && flag == 1; ++i)
{
flag = 0;
for(j=0; j < pArr->cnt-1-i; ++j)
{
if(pArr->pBase[j+1] < pArr->pBase[j])
{
t = pArr->pBase[j+1];
pArr->pBase[j+1] = pArr->pBase[j];
pArr->pBase[j] = t;
flag = 1;
}
}
}
}
/*
运行结果:
————————————————————————————————
完成初始化
6 2 3 -4 65
在第5个位置插入0后为:
6 2 3 -4 0 65
你删除的数为:0
6 2 3 -4 65
倒置后为:
65 -4 3 2 6
排序后为:
-4 2 3 6 65
Press any key to continue
————————————————————————————————
心得
————————————————————————————————
1.函数果然是C语言的基本单位;
2.java也是用C写出来,底层是个好东东;
3.学好底层才能学好OO思想.才能一通百通;
4.学C是为了更加了解java;要学好C就要了机器的思想,
要学好机器思想。。果断会汇编。。。
5.始于“不会编”,终于“汇编”;
————————————————————————————————
*/

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 01:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部