5.1可变数组

5.2链表

5.1可变数组

Resizable Array

Think about a set of functions that provide a mechanism of resizable array of int.

Growable

Get the current size

Access to the elements

The Interface

Array array_create(int init_size);

void array_free(Array *a);

int array_size(const Array *a);

int *array_at(Array *a, int index);

void array_inflate(Array *a, int more_size);

头文件array.h

 #include <stdio.h>

 #ifndef _ARRAY_H_
#define _ARRAY_H_ typedef struct
{
int *array;
int size;
}Array; Array array_create(int init_size);//清空数组
void array_free(Array *a);//返回数组元素数量
int array_size(const Array *a);//返回数组某个下标的值
int *array_at(Array *a, int index);//返回数组某个下标的值
int array_get(const Array *a, int index);//返回数组某个下标的值
void array_set(Array *a, int index, int value);//修改数组某个下标的值
void array_inflate(Array *a, int more_size);//增大数组 #endif

源文件array.c

 #include "array.h"

 const BLOCK_SIZE = ;

 //typedef struct
//{
// int *array;
// int size;
//}Array; Array array_create(int init_size)//创建数组
{
Array a;
a.size = init_size;
a.array = (int *)malloc(sizeof(int)*a.size);
return a;
} void array_free(Array *a)//清空数组
{
free(a->array);
a->array = NULL;
a->size = ;
} int array_size(const Array *a)//返回数组元素数量
{
return a->size;
} int *array_at(Array *a, int index)//返回数组某个下标的值
{
if (index >= a->size)
{
array_inflate(a, (index / BLOCK_SIZE + )*BLOCK_SIZE - a->size);
}
return &(a->array[index]);
} int array_get(const Array *a, int index)//返回数组某个下标的值
{
return a->array[index];
} void array_set(Array *a, int index, int value)//修改数组某个下标的值
{
a->array[index] = value;
} void array_inflate(Array *a, int more_size)//增大数组
{
int *p = (int *)malloc(sizeof(int)*(a->size + more_size));
int i;
for (i = ; i < a->size; i++)
{
p[i] = a->array[i];
}
free(a->array);
a->size += more_size;
} void main()
{
Array a = array_create();
printf("%d\n", array_size(&a));
*array_at(&a, ) = ;
printf("%d\n", *array_at(&a, )); int number;
int cnt = ;
while ()
{
/*scanf("%d", &number);
*array_at(&a, cnt++) = number;*/
scanf("%d", array_at(&a, cnt++));
} array_free(&a); system("pause");
}

5.2链表

issues

Allocate new memory each time it inflates is an easy and clean way. BUT

It takes time to copy, and

may fail in memory restricted situation

必须保证:->箭头左边的指针,不能为空

     for (q = , p = head; p; q = p, p = p->next)
{
if (p->value == )
{
q->next = p->next;
}
}

必须保证:->箭头左边的指针,不能为空

网易云课堂_C语言程序设计进阶_第5周:链表的更多相关文章

  1. 网易云课堂_C语言程序设计进阶_第三周:结构:结构、类型定义、联合

    3.1 枚举 3.2 结构 3.3 类型定义 3.1 枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法来表明: enum 枚举类型名字{名字0,...,名字n}; 枚举类型名字通常并不 ...

  2. 网易云课堂_C语言程序设计进阶_第6周:程序结构

    6.1 全局变量 6.2 编译预处理 6.3 大程序结构 6.1 全局变量 全局变量 定义在函数外面的变量是全局变量 全局变量具有全局的生存期和作用域 它们与任何函数都无关 在任何函数内部都可以使用它 ...

  3. 网易云课堂_C语言程序设计进阶_第8周:图形交互程序

    8.2函数指针 8.2函数指针 #include <stdio.h> #include <stdlib.h> void f(int i) { printf("void ...

  4. 网易云课堂_C语言程序设计进阶_第七周:文件:文件访问、格式化输入输出、二进制输入输出

    7.1文件 7.2底层操作 7.1文件 格式化的输入输出 printf %[flags][width][.prec][hIL]type Flag 含义 - 左对齐 + 在前面放+或- (space) ...

  5. 网易云课堂_C语言程序设计进阶_第5周:链表_1逆序输出的数列

    1 逆序输出的数列(10分) 题目内容: 你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束.然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1. 输 ...

  6. 网易云课堂_C语言程序设计进阶_期末考试编程题部分

    1 字符串循环右移(5分) 题目内容: 输入一个字符串和一个非负整数N,要求将字符串循环右移N次. 输入格式: 输入在第1行中给出一个字符串,以'#'表示结束,‘#’不是字符串的一部分,字符串的长度未 ...

  7. 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告

    2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength)    信号强度即大小. 其中R位于报告第一 ...

  8. 网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型_1计算分数精确值

    1 计算分数精确值(10分) 题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法. (0,1)之间的任何浮点数都可以表达为两个正整数的商, ...

  9. 网易云课堂_C语言程序设计进阶_第四周:ACL图形库

    创建ACLLib程序 #include"acllib.h" #include<stdio.h> int Setup1() { initWindow(, );//初始化窗 ...

随机推荐

  1. [原创]NT系统信息察看工具 : NtInfoGuy

    原文链接:[原创]NT系统信息察看工具 : NtInfoGuy 对于windows的内部,我们有太多的东西需要了解,认知.我们非凡的.从不知足的探求本性驱使我们要 拨开迷雾得见青天.太多的木马,病毒, ...

  2. vs2005 测试 lua环境

    (1)添加文件核路径 (2)库文件路径 (3)main.cpp #include <stdio.h>#include <string.h> extern "C&quo ...

  3. 推荐大家使用的CSS书写规范、顺序(转载)

    转自:http://www.admin10000.com/document/2979.html 写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体 ...

  4. Oracle导出空表处理方法

    exp或是expdp命令在导出数据的时候会把表记录数为0的表过滤掉,无法导出.通过如下方法可以导出记录数0的表.   1.先查询一下哪些表是空的: select table_name from use ...

  5. layerX offsetX pageX

    offsetX/offsetY:相对于当前元素的位移x/y:相对于当前座标系的位移,但是IE常常搞错当前座标系layerX/layerY:相对于当前座标系的位移pageX/pageY:相对于网页的位移 ...

  6. 【IOS】在SDK中打开其他接入应用的解决方案

      在SDK中打开其他接入应用的解决方案 一直以来,在iOS的开发中,在程序中打开另外一个应用是不允许.后来有正义之士用class-dump在私有API中找到了这样的功能.那就是使用UIApplica ...

  7. paip.c++ qt 外部dll共享库的导入以及引用

    paip.c++ qt 外部dll共享库的导入以及引用 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn. ...

  8. mvc mvp mvvm区别

    1 mvc是有视图(view),控制器(controller),模型(model)组成 view(用户界面) controller (业务逻辑)            model(数据存储) 接受指令 ...

  9. 自己主动下载源代码_并编译_打包_部署_重新启动服务的Shell脚本

    这里面Shell的各个操作含义,可參考我三年前的这篇文章:http://blog.csdn.net/jadyer/article/details/7960802 #!/bin/sh APP_NAME= ...

  10. _00023 Kafka 奇怪的操作_001它们的定义Encoder达到Class数据传输水平和决心

    博文作者:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 博文标题:_00023 Kafka 诡异操作_001自己定义Encoder实现Class级别的数据传送 ...