网易云课堂_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(, );//初始化窗 ...
随机推荐
- 在PHP代码中处理JSON 格式的字符串的两种方法:
总结: 在PHP代码中处理JSON 格式的字符串的两种方法: 方法一: $json= '[{"id":"1","name":"\u ...
- struts2笔记09-动态方法调用
1.action配置 <action name="testDynamic" class="com.test.actions.TestAction"> ...
- hdu 5126 stars cdq分治套cdq分治+树状数组
题目链接 给n个操作, 第一种是在x, y, z这个点+1. 第二种询问(x1, y1, z1). (x2, y2, z2)之间的总值. 用一次cdq分治可以将三维变两维, 两次的话就变成一维了, 然 ...
- python排序(选择, 插入)
1.选择排序 算法: 对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换:然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与 ...
- 怎查看linux系统的位数
# uname -a x86_64则说明你是64位内核, 跑的是64位的系统. i386, i686说明你是32位的内核, 跑的是32位的系统
- 【JavaScript脚本编程技术详解-----(一)】
首先说明,本系列教程是写给有一定的JavaScript编程基础的同学看的,最好还有其它的编程语言经验,因为里面可能涉及一些其它的程序设计语言写的源代码,这都是我自己总结的经验,我喜欢在学习一门新的编程 ...
- java中文乱码解决之道(四)—–java编码转换过程
原文出处:http://cmsblogs.com/?p=1475 前面三篇博客侧重介绍字符.编码问题,通过这三篇博客各位博友对各种字符编码有了一个初步的了解,要了解java的中文问题这是必须要了解的. ...
- Thrift使用实例
首先下载thrift.exe,和对应lib包.注意版本一定要一致. 否则编译会不识别出现错误. 可能会出现org.slf4j这个错误,那么你要把slf4j-api.jar下载下来引入到你的projec ...
- utf8+bom格式保存php curl乱码问题
今天开发遇到一个php curl取数据乱码问题 不是gzip也不是编码设置问题 最后有一同事判断为utf8+bom保存数据原因,懒得深入了解utf8+bom,仅做记录 [root@centos5 ~] ...
- Vim配置 终端背景色配置
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进 等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc.在启动vim时,当前用户 ...