List.h

#pragma once
#include "targetver.h" #include <stdio.h>
#include <tchar.h> #define LIST_INIT_SIZE 100
#define MAXSIZE 100 typedef int ElemType; typedef struct Sqlist {
ElemType * elem;
int length;
int listsize;
}Sqlist, *ListPtr; typedef enum Status {
success, fail, fatal, rangeerror,overflow
}Status; Status List_Init(ListPtr L); void List_Destroy(ListPtr L); void List_Clear(ListPtr L); bool List_Empty(ListPtr L); int List_Size(ListPtr L); Status List_Retrieve(ListPtr L, int pos, ElemType * elem); Status List_Locate(ListPtr L, ElemType elem, int *pos); Status List_Insert(ListPtr L, int pos, ElemType elem); Status List_Remove(ListPtr L, int pos); Status List_Prior(ListPtr L, int pos, ElemType * elem);

线性表.cpp

#include "stdafx.h"
#include<iostream>
#include "List.h"
using namespace std; Status List_Retrieve(ListPtr L, int pos, ElemType * elem) {
Status status = rangeerror;
int len = L->length;
if ( <= pos&&pos <= len) {
*elem = L->elem[pos];
status = success;
}
return status;
} Status List_Locate(ListPtr L, ElemType elem, int * pos) {
Status status = rangeerror;
int len = L->length;
int i = ;
while (i <= len && L->elem[i]==elem) {
i++;
}
if (i <= len) {
*pos = i;
status = success;
}
return status;
} Status List_Insert(ListPtr L, int pos, ElemType elem) {
Status status = rangeerror;
int len = L->length,i;
if (len > MAXSIZE)status = overflow;
else if ( <= pos && pos <= len + ) {
for (i = len; i >= pos; i--)
L->elem[i + ] = elem;
L->elem[pos] = elem;
L->length++;
status = success;
}
return status;
} Status List_Init(ListPtr L) {
Status status = fatal;
L->elem = (ElemType*)malloc((MAXSIZE + ) * sizeof(ElemType));
if (L->elem) {
L->length = ;
status = success;
}
return status;
} void List_Destroy(ListPtr L) {
if (L->elem) {
free(L->elem);
L->elem = NULL;
}
L->length = ;
} void List_Clear(ListPtr L) {
L->length = ;
} bool List_Empty(ListPtr L) {
return L->length == ;
} Status List_Prior(ListPtr L, int pos, ElemType * elem) {
Status status = fail;
int len = L->length;
if ( <= pos && pos <= len) {
*elem = L->elem[pos - ];
status = success;
}
return status;
} Status List_Next(ListPtr L, int pos, ElemType * elem) {
Status status;
int len = L->length;
if ( <= pos && pos <= len - ) {
*elem = L->elem[pos+];
status = success;
}
return status;
} int List_Size(ListPtr L) {
return L->length;
} Status List_Remove(ListPtr L, int pos) {
Status status = rangeerror;
int len = L->length, i;
if ( <= pos && pos <= len) {
for (i = pos; i < len; i++)
L->elem[i] = L->elem[i + ];
L->length--;
status = success;
}
return status;
} Status List_Union(ListPtr La, ListPtr Lb) {
ElemType elem;
Status status= fail;
int i, len = List_Size(Lb);
for (i = ; i <= len; i++) {
List_Retrieve(Lb, i, &elem);
if (status != success) {
status = List_Insert(La, , elem);
if (status != success)break;
}
}
return status;
} Status List_Merge(ListPtr La, ListPtr Lb, ListPtr Lc) {
ElemType elem1, elem2;
Status status=fail;
status = List_Init(Lc);
if(status != success)return status;
int i = , j = , k = ;
int n = List_Size(La), m = List_Size(Lb);
while (i <= n && j <= m) {
List_Retrieve(La, i, &elem1), List_Retrieve(Lb, j, &elem2);
if (elem1 < elem2) {
status = List_Insert(Lc, k, elem1);
i++;
}
else {
status = List_Insert(Lc, k, elem2);
j++;
}
if (status != success) return status;
k++;
}
while (i <= n) {
List_Retrieve(La, i, &elem1);
status = List_Insert(Lc, k, elem1);
if (status != success) return status;
i++, k++;
}
while (j <= m) {
List_Retrieve(Lb, j, &elem2);
status = List_Insert(Lc, k, elem2);
if (status != success) return status;
j++, k++;
}
return status;
} int main() {
ListPtr La = new Sqlist, Lb = new Sqlist, Lc = new Sqlist;;
List_Init(La);
List_Init(Lb);
List_Init(Lc);
int arra[] = { ,,,, };
for (int i = ; i <= ; i++)
List_Insert(La, i, arra[i-]); for(int i=;i<=;i++)
cout << La->elem[i] << " ";
cout << endl; int arrb[] = { ,,,, };
for (int i = ; i <= ; i++)
List_Insert(Lb, i, arrb[i - ]); for (int i = ; i <= ; i++)
cout << Lb->elem[i] << " ";
cout<< endl; Status status = List_Merge(La, Lb, Lc);
cout << status << endl;
if (status != success)return EXIT_FAILURE; for (int i = ; i <= ; i++)
cout << Lc->elem[i] << " ";
cout << endl; system("pause");
return EXIT_SUCCESS;
}

参考《数据结构与算法》 林劼

C++ 线性表实现的更多相关文章

  1. 线性表Linearlist

    顺序存储,链式存储,索引存储,散列存储 基本运算 SLIST         1.置空表 void SetNull(&L)     2.求长度 int Length(L)     3.取元素 ...

  2. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

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

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

  4. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  5. Java集合类学习笔记(各种线性表性能分析)

    ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组 ...

  6. 动态分配的顺序线性表的十五种操作—C语言实现

    线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...

  7. Java Se :线性表

    Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...

  8. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  9. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  10. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

随机推荐

  1. 【NOIP2016提高A组五校联考2】running

    题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每 ...

  2. Mapnik使用postgres中的栅格数据

    XML: <?xml version="1.0" encoding="utf-8"?> <Map background-color=" ...

  3. 对js数组去重的研究

    1.利用es5 let arr = [1, 2, 3, 4, 5, 6, 7, 1, 2, 3] const unique=arr=>{ return Array.from(new Set(ar ...

  4. 介绍HTML5几种存储方式

    总体情况 h5之前,存储主要是用cookies.cookies缺点有在请求头上带着数据,大小是4k之内.主Domain污染. 主要应用:购物车.客户登录 对于IE浏览器有UserData,大小是64k ...

  5. jquery eq()选择器 语法

    jquery eq()选择器 语法 作用::eq() 选择器选取带有指定 index 值的元素.index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1).经常与其他元素/选择器一 ...

  6. codevs 1002 搭桥x

    题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建 ...

  7. 新手 Redis 配置笔记(windows),附下载地址

    1.关于安装文件的选择 安装的时候应该下载免安装版,安装版虽然一路下一步就可以了,但是,当要修改配置文件的时候,特别痛苦,搜了两个小时,居然没有找到如何用命令修改配置文件,开放远程连接.所以对于第一次 ...

  8. Linux简介安装、系统启动过程、目录结构

    Linux简介安装.系统启动过程.目录结构 Linux 教程 Linux 英文解释为 Linux is not Unix. Linux 简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus ...

  9. babel简介——简单介绍与实用(转)

    博客讲解内容如下: 1.babel是什么 2.javascript制作规范 3.babel转译器 4.babel的使用 5.常见的几种babel转译器和插件 6.babel最常见配置选项 7.babe ...

  10. Spark 2.1.1 源码编译

    Spark 2.1.1 源码编译 标签(空格分隔): Spark Spark 源码编译 环境准备与起因 由于线上Spark On Yarn Spark Streaming程序在消费kafka 写入HD ...