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的更多相关文章

  1. 数据结构 --- 线性表学习(php模拟)

    线性表:零个或多个数据元素的有限序列(注:以下都是用的整型数据模拟) 一 顺序存储结构(用一段地址连续的存储单元一次存储线性表的数据元素) 1.1 三个属性:存储空间的起始位置:最大存储容量:当前长度 ...

  2. JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表

    Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...

  3. 线性表之顺序存储结构(C语言动态数组实现)

    线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...

  4. 第三章 线性表(C#实现)

    1.线性表 概念::零个或多个数据元素的有序序列. 描述: 2.线性表的抽象数据类型: ADT线性表 Data:线性表的数据对象集合为{a1,a2,...,an},每个元素的类型均为DataType. ...

  5. [置顶] ※数据结构※→☆线性表结构(queue)☆============队列 顺序存储结构(queue sequence)(八)

    队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...

  6. [置顶] ※数据结构※→☆线性表结构(queue)☆============循环队列 顺序存储结构(queue circular sequence)(十)

    循环队列 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量.存储在其中的队列称为循环队列(Circular Queue). ...

  7. java实现线性表

    /** * 线性表 * @author zyyt * */ public  class LinkList {//框架级别的大师级 private int size;//链表的实际大小 private ...

  8. 顺序线性表之大整数求和C++

    顺序线性表之大整数求和 大整数求和伪代码 1.初始化进位标志 flag=0: 2.求大整数 A 和 B 的长度: int aLength = a.GetLength(); int bLength = ...

  9. 顺序线性表 ---- ArrayList 源码解析及实现原理分析

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...

随机推荐

  1. rcnn学习(六):imdb.py学习

    # -------------------------------------------------------- # Fast R-CNN # Copyright (c) 2015 Microso ...

  2. POJ 3678 Katu Puzzle

    Description 给出一个关系,包括 And,Xor,Or 问是否存在解. Sol 经典的2-SAT问题. 把每个值看成两个点,一个点代表选 \(0\) ,另一个代表选 \(1\) . 首先来看 ...

  3. django 模板语法和三种返回方式

    模板 for循环 {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} if语句 ...

  4. Socket通信(一)

    代码及PDF下载链接:http://download.csdn.net/detail/u010312811/9683034 例程1:实现服务器与客户端的连接与简单数据收发 参考链接:http://bl ...

  5. php中并发读写文件冲突的解决方案

    在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...

  6. js小游戏---智力游戏

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  7. PHP操作数据库

    一.PHP连接到MySQL // //比较规范的写法是地址,登录名,密码这样写,比较安全 define("DB_HOST", 'localhost'); define('DB_US ...

  8. WPF播放视频

    在现在的项目中需要使用到播放视频的功能,本来打算使用VLC来做的.后来发现WPF 4.0之后新增了MediaElement类,可以实现视频播放. <Grid> <Grid.RowDe ...

  9. 常见开发需求之前端利器webstorm中的git和快捷键

    需求   前端开发中我们最常用的一般是webstorm.hbuilder和sublime,因为以前使用过一段时间eclipse所以我对webstorm的感觉比较良好,再加上以前使用hbuilder维护 ...

  10. Codeforces Round #365 (Div. 2)

    A题 Mishka and Game 水..随便统计一下就A了 #include <cstdio> #include <map> #include <set> #i ...