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), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
随机推荐
- 扑克牌中的顺子(网易2014.3.16笔试offerP226)
题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2~10为数字本身,A为1,J~K为11,12,13,而大小王可以看成任意数字.(网易要求必须用C完成,可以用C库函数) ja ...
- 奇怪的 Markdown / LaTeX 笔记
记一下日常见到的一些奇怪的 Markdown / LaTeX 用法... Markdown LaTeX LaTeX 数学 1. 运算符 1.1 造运算符: a \operatorname{sin} c ...
- Elastic-Job介绍
1 什么是分布式任务调度 什么是分布式?当前软件的架构正在逐步转变为分布式架构,将单体结构分为若干服务,服务之间通过网络交互来完成用户的业务处理,如下图,电商系统为分布式架构,由订单服务.商品服务.用 ...
- springboot集成fastjson
@Configuration @EnableWebMvc public class WebMvcConfigurer extends WebMvcConfigurerAdapter { /** * f ...
- (65)CRC32校验C语言版本
#include<iostream> # include <stdio.h> # include <string.h> typedef unsigned int u ...
- Spring Boot教程(十八)构建RESTful API
首先,回顾并详细说明一下在快速入门中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建 ...
- vue中的methods,conputed,watcher
todo 1,computed(计算属性) 属性的结果会被缓存, 除非依赖的响应式属性变化才会重新计算, 主要 当做属性来使用;(虽然是个方法,但是当做属性使用)(场景:引用一些经过操作的数据) co ...
- 【错误记录】Python 负数取余问题
print(-123%10) # 输出 7 print(-123%-10) # 输出 -3 这里面第二条是我们一般意义上的取余操作.这里也特别标注一下,如果涉及到负数取余要用上述解决办法. ...
- 聊聊spring-boot-starter-data-redis的配置变更
本文主要研究一下spring-boot-starter-data-redis的配置变更 配置变更 以前是spring-boot的1.4.x版本的(spring-data-redis为1.7.x版本), ...
- Java的LinkedList底层源码分析
首先我们先说一下,源码里可以看出此类不仅仅用双向链表实现了队列数据结构的功能,还提供了链表数据结构的功能.