网易云课堂_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(, );//初始化窗 ...
随机推荐
- jupyter巨好玩-简介与安装
ipython notebook改名jupyter了而且更好玩更好用 jupyter简介 jupyter是啥啊? 这个要从ipython说起,ipython是个交互式的python的解释器,自带颜色, ...
- SQL Server 创建数据库快照
创建数据库快照: 必须在create database 命令中包括源数据库的每一个数据文件,原始逻辑名,新物理名与路径, 不能指定其他属性 create database db_snapshot_na ...
- 2014第11周一word样式
今天摸索使用了word的样式替换功能感觉不错,简单记录下: 1.将某一个样式的标题统一替换为另一样式,之前一般是格式化一个个找到标题设置格式, 今天才发现可以选中标题->在浮动框上单击样式或开始 ...
- CentOS Linux 语言环境设置
程序运行使用一套语言需要有字符集(数据)和字体(显示),Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境. 一.locale详解 在 Li ...
- Android GUI Building Blocks
说明:此笔记为“Android开发”学习视频的笔记,链接如下:http://open.163.com/movie/2010/1/8/D/M79HE97C3_M79HEQJ8D.html 一, Acti ...
- 元数据(meta-data)
本章所介绍的元数据的知识,可能在定制系统时会用到.因为那是后需要修改底层框架的一些内容 一.元数据的定义 在AndroidManifest.xml中如下书写: <activity android ...
- http multipart/form-data POST文件上传详解
POST /test/index.php HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firef ...
- C++中使用class和structkeyword的不同
类能够在它的第一个訪问说明符之前定义成员,对这样的成员的訪问权限依赖于类定义的方式.假设我们使用structkeyword,则定义在第一个訪问说明符之前的成员是public的,相反,假设使用class ...
- winform CheckedListBox实现全选/全不选
/全选 private void button3_Click(object sender, EventArgs e) { for (int i ...
- css笔记:如何让一个div居于页面正中间
如何让一个div居于页面中间,我今天说的是让一个div水平居中同时垂直居中,而不是简单的top:50%,left:50%.当然,我们就按一开始的思路写一下:top,left属性都设为50%,看一下效果 ...