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), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
随机推荐
- JAVA笔记17-容器之一 图、Collection接口、Iterator接口(重要)
掌握1136: (1)1个图 (2)1个类:Collections (3)3个知识点:For(了解),Generic泛型,Auto-boxing/unboxing(自动打包/解包) (4)6个接口:C ...
- 【leetcode】Find K Pairs with Smallest Sums
You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...
- 对html2canvas的研究
介绍 该脚本允许您直接在用户浏览器上截取网页或部分网页的“屏幕截图”.屏幕截图基于DOM,因此它可能不是真实表示的100%准确,因为它没有制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图. 这 ...
- 18.二叉树的镜像(python)
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. class Solution: # 返回镜像树的根节点 def Mirror(self, root): # write code here if ...
- caffe的网络层结构(1)
1.concat层 该层有两个相同作用的参数: message ConcatParameter { //指定拼接的维度,默认为1即以channel通道进行拼接;支持负索引,即-1表示最后一个维度 op ...
- Vue的watch和computed方法的使用
Vue的watch属性 Vue的watch属性可以用来监听data属性中数据的变化 <!DOCTYPE html> <html> <head> <meta c ...
- ubuntu 7z解压
安装方法: sudo apt-get install p7zip 解压文件: 7z x manager.7z -r -o /home/xx 解释如下: x 代表解压缩文件,并且是按原始 ...
- React 初试
小Demo, 后面会进行拓展的 import React from 'react'; import ReactDOM from 'react-dom'; class Welcome extends R ...
- 消息 15135,级别 16,状态 8,过程 sp_addextendedproperty,对象无效。不允许有扩展属性,或对象不存在。
不知道网上为啥有那么多复制粘贴的文章,写点原创不好吗?堂而皇之的贴别人的文章有意思吗? 消息 15135,级别 16,状态 8,过程 sp_addextendedproperty,对象无效.不允许有扩 ...
- Java中String的 "引用" 传递
1.来看一段有趣但又让人困惑的代码片段 public static void main(String[] args){ String x = new String("ab"); c ...