网易云课堂_C语言程序设计进阶_第5周:链表
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周:链表的更多相关文章
- 网易云课堂_C语言程序设计进阶_第三周:结构:结构、类型定义、联合
3.1 枚举 3.2 结构 3.3 类型定义 3.1 枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法来表明: enum 枚举类型名字{名字0,...,名字n}; 枚举类型名字通常并不 ...
- 网易云课堂_C语言程序设计进阶_第6周:程序结构
6.1 全局变量 6.2 编译预处理 6.3 大程序结构 6.1 全局变量 全局变量 定义在函数外面的变量是全局变量 全局变量具有全局的生存期和作用域 它们与任何函数都无关 在任何函数内部都可以使用它 ...
- 网易云课堂_C语言程序设计进阶_第8周:图形交互程序
8.2函数指针 8.2函数指针 #include <stdio.h> #include <stdlib.h> void f(int i) { printf("void ...
- 网易云课堂_C语言程序设计进阶_第七周:文件:文件访问、格式化输入输出、二进制输入输出
7.1文件 7.2底层操作 7.1文件 格式化的输入输出 printf %[flags][width][.prec][hIL]type Flag 含义 - 左对齐 + 在前面放+或- (space) ...
- 网易云课堂_C语言程序设计进阶_第5周:链表_1逆序输出的数列
1 逆序输出的数列(10分) 题目内容: 你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束.然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1. 输 ...
- 网易云课堂_C语言程序设计进阶_期末考试编程题部分
1 字符串循环右移(5分) 题目内容: 输入一个字符串和一个非负整数N,要求将字符串循环右移N次. 输入格式: 输入在第1行中给出一个字符串,以'#'表示结束,‘#’不是字符串的一部分,字符串的长度未 ...
- 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告
2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength) 信号强度即大小. 其中R位于报告第一 ...
- 网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型_1计算分数精确值
1 计算分数精确值(10分) 题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法. (0,1)之间的任何浮点数都可以表达为两个正整数的商, ...
- 网易云课堂_C语言程序设计进阶_第四周:ACL图形库
创建ACLLib程序 #include"acllib.h" #include<stdio.h> int Setup1() { initWindow(, );//初始化窗 ...
随机推荐
- QJ系列笔记
1.求int型数据在内存中存储时1的个数输入一个int型数据,计算出该int型数据在内存中存储时1的个数. #include<stdio.h> void main() { ; int yu ...
- Oracle EBS-SQL (INV-3):检查仓库库存价值明细.sql
SELECT a.subinventory_code 子库代码 ,d.DESCRIPTION ...
- VS2008下WinRar源码生成dll和 lib总结
WinRar官方提供了源码(http://www.rarlab.com/rar_add.htm):如果自己想要修改里面的内容就要重新生成DLL和LIB,我在网上找了很多资料都没有说得很清楚.花一两天的 ...
- Oracle数据导入导出imp/exp(转)
在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 一.Oracle ...
- C语言的本质(1)——计算机与二进制
人类的计数方式通常是"逢十进一",称为十进制(Decimal),大概因为人有十个手指,所以十进制是最自然的计数方式,各民族的文字中都有十个数字,而阿拉伯数字0-9是目前最广泛采用的 ...
- POI开源项目-PPT2PNG转换测试
第一次学使用软件去读取Office类文件. 今天百度了一下,发现Apache也是有这样的开源项目的,POI提供下列支持: 测试了一下HSLF对PPT的读操作,并将PPT转化为图片保存到指定目录: 使用 ...
- Spring、使用注解方式装配对象(@Resource、@Autowired)
使用手工注解方式有两种方式@Resource.@Autowired 首先,引入注解所使用的Jar包 :common-annotations.jar 然后在beans.xml中加入命名空间空间 xml ...
- 赵雅智_BroadcastReceiver电话监听
AndroidManifest.xml 注冊广播接收者 加入权限 <?xml version="1.0" encoding="utf-8"?> &l ...
- UVA - 10098 - Generating Fast (枚举排列)
思路:生成全排列,用next_permutation.注意生成之前先对那个字符数组排序. AC代码: #include <cstdio> #include <cstring> ...
- OAuthBase.cs
using System; using System.Security.Cryptography; using System.Collections.Generic; using System.Tex ...