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

  1. #include <stdio.h>
  2.  
  3. #ifndef _ARRAY_H_
  4. #define _ARRAY_H_
  5.  
  6. typedef struct
  7. {
  8. int *array;
  9. int size;
  10. }Array;
  11.  
  12. Array array_create(int init_size);//清空数组
  13. void array_free(Array *a);//返回数组元素数量
  14. int array_size(const Array *a);//返回数组某个下标的值
  15. int *array_at(Array *a, int index);//返回数组某个下标的值
  16. int array_get(const Array *a, int index);//返回数组某个下标的值
  17. void array_set(Array *a, int index, int value);//修改数组某个下标的值
  18. void array_inflate(Array *a, int more_size);//增大数组
  19.  
  20. #endif

源文件array.c

  1. #include "array.h"
  2.  
  3. const BLOCK_SIZE = ;
  4.  
  5. //typedef struct
  6. //{
  7. // int *array;
  8. // int size;
  9. //}Array;
  10.  
  11. Array array_create(int init_size)//创建数组
  12. {
  13. Array a;
  14. a.size = init_size;
  15. a.array = (int *)malloc(sizeof(int)*a.size);
  16. return a;
  17. }
  18.  
  19. void array_free(Array *a)//清空数组
  20. {
  21. free(a->array);
  22. a->array = NULL;
  23. a->size = ;
  24. }
  25.  
  26. int array_size(const Array *a)//返回数组元素数量
  27. {
  28. return a->size;
  29. }
  30.  
  31. int *array_at(Array *a, int index)//返回数组某个下标的值
  32. {
  33. if (index >= a->size)
  34. {
  35. array_inflate(a, (index / BLOCK_SIZE + )*BLOCK_SIZE - a->size);
  36. }
  37. return &(a->array[index]);
  38. }
  39.  
  40. int array_get(const Array *a, int index)//返回数组某个下标的值
  41. {
  42. return a->array[index];
  43. }
  44.  
  45. void array_set(Array *a, int index, int value)//修改数组某个下标的值
  46. {
  47. a->array[index] = value;
  48. }
  49.  
  50. void array_inflate(Array *a, int more_size)//增大数组
  51. {
  52. int *p = (int *)malloc(sizeof(int)*(a->size + more_size));
  53. int i;
  54. for (i = ; i < a->size; i++)
  55. {
  56. p[i] = a->array[i];
  57. }
  58. free(a->array);
  59. a->size += more_size;
  60. }
  61.  
  62. void main()
  63. {
  64. Array a = array_create();
  65. printf("%d\n", array_size(&a));
  66. *array_at(&a, ) = ;
  67. printf("%d\n", *array_at(&a, ));
  68.  
  69. int number;
  70. int cnt = ;
  71. while ()
  72. {
  73. /*scanf("%d", &number);
  74. *array_at(&a, cnt++) = number;*/
  75. scanf("%d", array_at(&a, cnt++));
  76. }
  77.  
  78. array_free(&a);
  79.  
  80. system("pause");
  81. }

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

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

  1. for (q = , p = head; p; q = p, p = p->next)
  2. {
  3. if (p->value == )
  4. {
  5. q->next = p->next;
  6. }
  7. }

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

网易云课堂_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. QJ系列笔记

    1.求int型数据在内存中存储时1的个数输入一个int型数据,计算出该int型数据在内存中存储时1的个数. #include<stdio.h> void main() { ; int yu ...

  2. Oracle EBS-SQL (INV-3):检查仓库库存价值明细.sql

    SELECT      a.subinventory_code                                 子库代码     ,d.DESCRIPTION              ...

  3. VS2008下WinRar源码生成dll和 lib总结

    WinRar官方提供了源码(http://www.rarlab.com/rar_add.htm):如果自己想要修改里面的内容就要重新生成DLL和LIB,我在网上找了很多资料都没有说得很清楚.花一两天的 ...

  4. Oracle数据导入导出imp/exp(转)

    在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 一.Oracle ...

  5. C语言的本质(1)——计算机与二进制

    人类的计数方式通常是"逢十进一",称为十进制(Decimal),大概因为人有十个手指,所以十进制是最自然的计数方式,各民族的文字中都有十个数字,而阿拉伯数字0-9是目前最广泛采用的 ...

  6. POI开源项目-PPT2PNG转换测试

    第一次学使用软件去读取Office类文件. 今天百度了一下,发现Apache也是有这样的开源项目的,POI提供下列支持: 测试了一下HSLF对PPT的读操作,并将PPT转化为图片保存到指定目录: 使用 ...

  7. Spring、使用注解方式装配对象(@Resource、@Autowired)

    使用手工注解方式有两种方式@Resource.@Autowired 首先,引入注解所使用的Jar包  :common-annotations.jar 然后在beans.xml中加入命名空间空间 xml ...

  8. 赵雅智_BroadcastReceiver电话监听

    AndroidManifest.xml 注冊广播接收者 加入权限 <?xml version="1.0" encoding="utf-8"?> &l ...

  9. UVA - 10098 - Generating Fast (枚举排列)

    思路:生成全排列,用next_permutation.注意生成之前先对那个字符数组排序. AC代码: #include <cstdio> #include <cstring> ...

  10. OAuthBase.cs

    using System; using System.Security.Cryptography; using System.Collections.Generic; using System.Tex ...