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), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
随机推荐
- 【NOIP2016提高A组集训第13场11.11】最大匹配
题目 mhy12345学习了二分图匹配,二分图是一种特殊的图,其中的点可以分到两个集合中,使得相同的集合中的点两两没有连边. 图的"匹配"是指这个图的一个边集,里面的边两两不存在公 ...
- python语言特性简要记载
1.python是解释型语言,而c,c++等是编译型语言. 2.python是动态类型语言,这意味着你不需要在声明变量时指定类型. 3.Python是面向对象语言,所有允许定义类并且可以继承和组合.P ...
- java.lang.ClassNotFoundException: org.springframework.web.util.WebAppRootListener
严重: Error configuring application listener of class org.springframework.web.util.WebAppRootListenerj ...
- 查看 XML 文件
在所有现代浏览器中,均能够查看原始的 XML 文件. 不要指望 XML 文件会直接显示为 HTML 页面. 查看 XML 文件 查看这个 XML 文件:note.xml 打开 XML 文件 - XML ...
- 【java工具类】下载文件
FileUtil.java /** * 下载文件 * @param file; * @param response */ public static void downloadFile(File fi ...
- 使用webuploader组件实现大文件分片上传,断点续传
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
- C# 异步编程,async与await的简单学习
前提声明:C# 5.0 .NET Framework 4.5 2012-08-15 异步和等待(async和await).调用方信息(Caller Information) (C#版本与.NET版本 ...
- sqli-labs(35)
0X01 构造闭合 发现不需要闭合 ?id=- union ,database(), 0X02组合拳打法
- sqli-lab(16)
现实证明 英语好才能学渗透 基于bool类型的时间盲注 双引号 0X01爱之初体验 说实话我还没有找到 盲注的时候怎么判断闭合的方法 so 这里我直接看源码 这里的语句应该是 (“”)这种的闭合形式 ...
- MVC的一个简单实例
基本思路: 一个Regist.jsp注册页面,用于收集用户信息,发送请求给控制器Servlet:控制器层Servlet封装模型层对象 jBean,并调用其方法regiser实现用户信息的保存:模型层J ...