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 ------------------------------------ ...
随机推荐
- rcnn学习(六):imdb.py学习
# -------------------------------------------------------- # Fast R-CNN # Copyright (c) 2015 Microso ...
- POJ 3678 Katu Puzzle
Description 给出一个关系,包括 And,Xor,Or 问是否存在解. Sol 经典的2-SAT问题. 把每个值看成两个点,一个点代表选 \(0\) ,另一个代表选 \(1\) . 首先来看 ...
- django 模板语法和三种返回方式
模板 for循环 {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} if语句 ...
- Socket通信(一)
代码及PDF下载链接:http://download.csdn.net/detail/u010312811/9683034 例程1:实现服务器与客户端的连接与简单数据收发 参考链接:http://bl ...
- php中并发读写文件冲突的解决方案
在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...
- js小游戏---智力游戏
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
- PHP操作数据库
一.PHP连接到MySQL // //比较规范的写法是地址,登录名,密码这样写,比较安全 define("DB_HOST", 'localhost'); define('DB_US ...
- WPF播放视频
在现在的项目中需要使用到播放视频的功能,本来打算使用VLC来做的.后来发现WPF 4.0之后新增了MediaElement类,可以实现视频播放. <Grid> <Grid.RowDe ...
- 常见开发需求之前端利器webstorm中的git和快捷键
需求 前端开发中我们最常用的一般是webstorm.hbuilder和sublime,因为以前使用过一段时间eclipse所以我对webstorm的感觉比较良好,再加上以前使用hbuilder维护 ...
- Codeforces Round #365 (Div. 2)
A题 Mishka and Game 水..随便统计一下就A了 #include <cstdio> #include <map> #include <set> #i ...