C++ 线性表实现
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++ 线性表实现的更多相关文章
- 线性表Linearlist
顺序存储,链式存储,索引存储,散列存储 基本运算 SLIST 1.置空表 void SetNull(&L) 2.求长度 int Length(L) 3.取元素 ...
- 数据结构(Java描述)之线性表
基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...
- JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表
Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- Java集合类学习笔记(各种线性表性能分析)
ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组 ...
- 动态分配的顺序线性表的十五种操作—C语言实现
线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...
- Java Se :线性表
Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...
- 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表
一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...
- 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现
注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
随机推荐
- 【NOIP2014模拟8.17】Magical GCD
题目 对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数.给你一个序列,求出这个序列最大的 Magical GCD. 分析 根据暴力的思想, \( ...
- 容器"共享"宿主机的hosts文件(终极方案)
0.背景 有时候制作docker镜像生成容器时需要宿主机的hosts文件共享到容器中.首先想的是通过挂载的方式共享hosts文件,但是实践时发现根本行不通,hosts文件在/etc/目录下,如进行挂载 ...
- 23.二叉搜索树的后序遍历(python)
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 这道题特别傻的地方: 当输入sequence为空时 ...
- 一个用于格式化和处理数字的javascript库----Numeral.js
npm地址:https://www.npmjs.com/package/numeral 1.转化成百分比: numeral(num).format('0.00%')
- MongoClient类
在2.10.0版本中引入了MongoClient类,同时在其API中也说明了Mongo类会在将来的版本中被MongoClient替换(Note: This class has been superse ...
- sh_03_逻辑运算演练
sh_03_逻辑运算演练 # 练习1: 定义一个整数变量 age,编写代码判断年龄是否正确 age = 12 # 要求人的年龄在 0-120 之间 """ 10000 a ...
- 1.Python编程基础
1. 其实,程序指的就是一系列指令,用来告诉计算机做什么,而编写程序的关键在于,我们需要用计算机可以理解的语言来提供这些指令. 虽然借助 Siri(Apple).Google Now(Android) ...
- Vue.use源码分析(转)+如何封装一个组件
封装一个组件:https://www.jianshu.com/p/89a05706917a 我想有过vue开发经验的,对于vue.use并不陌生.当使用vue-resource或vue-router等 ...
- Vuex入门(转)
参考:https://segmentfault.com/a/1190000015782272 https://www.cnblogs.com/y896926473/p/6709733.html 如果你 ...
- Java中的可变参数
1.什么是可变参数 可变参数是JDK1.5的新特性,允许一个方式接受任意数量的参数 public static void main(String[] args) { print("a&quo ...