1.线性表-Array

fatal.h
#include <stdio.h>
#include <stdlib.h>
#define Error(Str) FatalError(Str)
#define FatalError(Str) fprintf(stderr, "%s\n", Str), exit(1)
array.h
typedef int ElementType;
#ifndef _List_H
#define _List_H
struct ListRecord;
typedef struct ListRecord *List;
typedef int Position;
List MakeEmpty(List L);
int IsEmpty(List L);
int IsFull(List L);
int IsLast(Position P, List L);
Position Find(ElementType X, List L);
void Delete(ElementType X, List L);
void Insert(ElementType X, List L, Position P);
void DeleteList(List L);
Position Header(List L);
Position First(List L);
Position Advance(Position P);
ElementType Retrieve(Position P, List L);
#endif
array.c
#include "array.h"
#include <stdlib.h>
#include "fatal.h"
#define CAPACITY 100
struct ListRecord
{
ElementType *Array;
int Last;
};
List MakeEmpty(List L)
{
if (L != NULL)
DeleteList(L);
L = malloc(sizeof(struct ListRecord));
if (L == NULL)
FatalError("Out of memory!");
L->Array = malloc(sizeof(ElementType) * CAPACITY);
if (L->Array == NULL)
FatalError("Out of space!!!");
L->Last = -1;
return L;
}
int IsEmpty(List L)
{
return L->Last == -1;
}
int IsFull(List L)
{
return L->Last == CAPACITY-1;
}
int IsLast(Position P, List L)
{
return P == L->Last;
}
Position Find(ElementType X, List L)
{
Position P;
P = 0;
while (P <= L->Last && L->Array[P] != X)
P++;
if (P > L->Last)
return -1;
else
return P;
}
void Delete(ElementType X, List L)
{
Position P;
P = Find(X, L);
Position i;
if (P < 0 || P > L->Last)
Error("Illegal position");
for (i = P; i < L->Last; i++)
L->Array[i] = L->Array[i+1];
L->Last--;
}
/* Insert (after legal position P) */
void Insert(ElementType X, List L, Position P)
{
Position i, Q;
if (IsFull(L))
Error("Full list");
Q = P+1;
if (Q < 0 || Q > L->Last+1)
Error("Illegal position");
for (i = L->Last; i >= Q; i--)
L->Array[i+1] = L->Array[i];
L->Array[Q] = X;
L->Last++;
}
void DeleteList(List L)
{
if (L != NULL)
{
free(L->Array);
free(L);
}
}
Position Header(List L)
{
return -1;
}
Position First(List L)
{
return 0;
}
Position Advance(Position P)
{
return ++P;
}
ElementType Retrieve(Position P, List L)
{
return L->Array[P];
}
testarray.c
#include <stdio.h>
#include "array.h"
void PrintList(const List L)
{
Position P = Header(L);
if (IsEmpty(L))
printf("Empty list\n");
else
{
do
{
P = Advance(P);
printf("%d ", Retrieve(P, L));
} while (!IsLast(P, L));
printf("\n");
}
}
int main()
{
List L;
Position P;
int i;
L = MakeEmpty(NULL);
P = Header(L);
PrintList(L);
for (i = 0; i < 10; i++)
{
Insert(i, L, P);
PrintList(L);
P = Advance(P);
}
for (i = 0; i < 10; i += 2)
Delete(i, L);
for (i = 0; i < 10; i++)
if (Find(i, L) == -1)
printf("Element %d Find fails\n", i);
printf("Finished deletions\n");
PrintList(L);
DeleteList(L);
return 0;
}
1.线性表-Array的更多相关文章
- 数据结构 --- 线性表学习(php模拟)
线性表:零个或多个数据元素的有限序列(注:以下都是用的整型数据模拟) 一 顺序存储结构(用一段地址连续的存储单元一次存储线性表的数据元素) 1.1 三个属性:存储空间的起始位置:最大存储容量:当前长度 ...
- JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表
Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...
- 线性表之顺序存储结构(C语言动态数组实现)
线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...
- 第三章 线性表(C#实现)
1.线性表 概念::零个或多个数据元素的有序序列. 描述: 2.线性表的抽象数据类型: ADT线性表 Data:线性表的数据对象集合为{a1,a2,...,an},每个元素的类型均为DataType. ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============队列 顺序存储结构(queue sequence)(八)
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============循环队列 顺序存储结构(queue circular sequence)(十)
循环队列 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量.存储在其中的队列称为循环队列(Circular Queue). ...
- java实现线性表
/** * 线性表 * @author zyyt * */ public class LinkList {//框架级别的大师级 private int size;//链表的实际大小 private ...
- 顺序线性表之大整数求和C++
顺序线性表之大整数求和 大整数求和伪代码 1.初始化进位标志 flag=0: 2.求大整数 A 和 B 的长度: int aLength = a.GetLength(); int bLength = ...
- 顺序线性表 ---- ArrayList 源码解析及实现原理分析
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...
随机推荐
- IE 8 下的 box-sizing 和 min-* 属性
在非 IE 浏览器中,默认情况下 width 属性指的是内容区域(content)的宽度. IE 6+ 中,如果浏览器以标准模型渲染,和非 IE 浏览器的表现是一致的:如果浏览器以怪癖模式渲染,则 w ...
- iOS开发——高级篇——二维码的生产和读取
一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤:导入CoreImage框架通过滤镜CIFilter生成二维码 二维码 ...
- 学习 opencv---(1) opencv3.1.0 组件结构浅析
本系列是根据 浅墨大神 的opencv系列而写的,,应该大部分内容会一样..如有侵权还请告知........... 开发环境:win7 + VS2013 + opencv3.1.0 至于OpenCV组 ...
- SQLLocalDB 11.0持续报错,这是泥马德什么问题啊!!!
Windows API 调用 WaitForMultipleObjects 返回了错误代码: 575.Windows 系统错误消息为: {应用程序错误}应用程序无法正常启动(0x%lx).请单击“确定 ...
- 【转】android中ListView的定位:使用setSelectionFromTop实现ListView的position的保持
如果一个ListView太长,有时我们希望ListView在从其他界面返回的时候能够恢复上次查看的位置,这就涉及到ListView的定位问题: 解决的办法如下: 1 2 3 4 5 6 7 // 保存 ...
- 《C#高级编程》之委托学习笔记 (转载)
全文摘自 http://www.cnblogs.com/xun126/archive/2010/12/30/1921551.html 写得不错,特意备份!并改正其中的错误代码.. 正文: 最近 ...
- 问题:QXcbConnection: Could not connect to display
Wkhtmltopdf 失败 (错误代码: -6). 消息: The switch --header-spacing, is not support using unpatched qt, and w ...
- T-SQL函数总结
T-SQL函数的类别和描述. 函数类别 作用 聚合函数 执行的操作是将多个值合并为一个值.例如COUNT.SUM.MIN 和 MAX. 配置函数 是一种标量函数,可返回有关配置设置的信息. 转换函数 ...
- Ubuntu下Sublime Text 3解决无法输入中文的方法
Ubuntu下Sublime Text 3解决无法输入中文的方法_百度经验http://jingyan.baidu.com/article/f3ad7d0ff8731609c3345b3b.html ...
- Linux常用命令学习4---(挂载命令mount umount、用户登陆查看和用户交互命令 w who last lastlog)
紧接着上一篇Linux的命令行的学习:Linux学习3---(文件的压缩和解压缩命令zip unzip tar.关机和重启命令shutdown reboot……) 1.挂载命令 简介 ...