1-线性表 顺序存储

仅供学习记录参考

如果有人觉得我的代码能帮到的话也很好

有问题可以随时提问!

2017/7/11

1、基本功能的实现

  1 #include<iostream>
  2 #include<cstdlib>
  3 using namespace std;
  4 #define ture 1
  5 #define false 0
  6 #define maxsize 50
  7 #define listincreament 10
  8 #define ok 1
  9 #define error -3
 10 #define overflow -2
 11 typedef int Status;
 12 typedef int ElemType;
 13
 14 typedef struct{
 15 ElemType *data;
 16 int length;
 17 int listsize;
 18 }SqList;
 19
 20 Status initList_Sq(SqList &L)
 21 {
 22     L.data=(ElemType *)malloc(maxsize*sizeof(ElemType));
 23     L.length=0;
 24     L.listsize=maxsize;
 25     return ok;
 26 }
 27 Status ListInsert_Sq(SqList &L,int i,ElemType e)
 28 {
 29     ElemType *newbase,*p,*q;
 30     //顺序线性表L中第i个位置插入新的元素e
 31     if(i<1||i>L.length)return error;
 32     if(L.length>=L.listsize)
 33     {
 34         //存储空间满,增加分配。
 35         newbase=(ElemType *)realloc(L.data,(L.listsize+listincreament)*sizeof(ElemType));
 36         if(!newbase) exit(overflow);
 37         L.data=newbase;
 38         L.listsize+=listincreament;
 39     }
 40
 41     for(int j=L.length;j>=i;j--)
 42     {
 43         L.data[j]=L.data[j-1];
 44     }
 45     L.data[i-1]=e;
 46     L.length++;
 47     return ok;
 48 }
 49 void showList(SqList &L)
 50 {
 51     ElemType *p;
 52     int i=0;
 53     for(int i=0;i<L.length;i++)
 54     {
 55         cout<<L.data[i];
 56         if(i!=L.length-1) cout<<‘ ‘;
 57         else cout<<endl;
 58     }
 59 }
 60 Status DeleteList_Elem(SqList &L,int i)
 61 {
 62     if(i<0||i>=L.length) return error;
 63     for(int j=i;j<L.length-1;j++)
 64     {
 65         L.data[j]=L.data[j+1];
 66     }
 67     L.length--;
 68     return ok;
 69 }
 70 int LocateElem(SqList &L,ElemType e)
 71 {
 72     int pos=-1;
 73     for(int j=0;j<L.length;j++)
 74     {
 75         if(L.data[j]==e)
 76             {pos=j;break;}
 77     }
 78     return pos+1;
 79 }
 80 //细节:返回值要+1
 81 int mergeList(SqList &a,SqList &b,SqList &c)
 82 {
 83     ElemType *x,*y,*z;
 84     int ia=0,ib=0,ic=0;
 85     while(ia<a.length-1&&ib<b.length-1)
 86     {
 87         if(a.data[ia]<b.data[ib])
 88         {
 89             c.data[ic++]=a.data[ia++];
 90         }
 91         else {c.data[ic++]=b.data[ib++];}
 92     }
 93     while(ia<a.length-1)
 94         c.data[ic++]=a.data[ia++];
 95     while(ib<b.length-1)
 96         c.data[ic++]=b.data[ib++];
 97     c.length=ic;
 98     return ok;
 99 }
100
101 int main()
102 {
103     int w;
104     SqList L1,L2,L3;
105     w=initList_Sq(L1);
106     for(int i=0;i<10;i++)
107     {L1.data[i]=i+1;L1.length++;}
108     L1.length=10;
109
110     initList_Sq(L2);
111     initList_Sq(L3);
112
113     for(int i=0;i<7;i++)
114     {L2.data[i]=(i+1)*3;}
115     L2.length=7;
116
117     //cout<<w;
118     showList(L1);
119     ListInsert_Sq(L1,4,33);
120     DeleteList_Elem(L1,7);
121     showList(L1);
122     int a=LocateElem(L1,33);
123     cout<<a<<endl;
124     mergeList(L1,L2,L3);
125     showList(L3);
126     return 0;
127 }
时间: 2024-11-08 22:30:01

1-线性表 顺序存储的相关文章

数据结构——线性表顺序存储结构

 关于线性表 线性表是零个或者多个数据元素的集合.它主要有以下三个特征: 1:线性表的数据元素之间是有顺序的. 2:线性表中数据元素个数是有限的. 3:线性表中数据元素数据类型是相同的. 关于线性表的操作,主要有 创建线性表.销毁线性表.清空线性表.将元素插入线性表.将元素从线性表中删除.获取线性表中某个位置的元素.获取线性表的长度. 线性表主要有两种存储结构: 1:线性表的顺序存储结构,c语言中的数组及采用这种方式. 2:线性表的链式存储结构. 关于顺序存储结构 定义: 是指用一段地址连续的内

数据结构与算法-线性表顺序存储结构删除操作的实现

这一章节我们来看一下线性表顺序存储结构删除操作的简单实现 package com.ray.testobject; public class Test { private Object[] list; public Object[] getList() { return list; } /** * 初始化list * * @param num * 元素个数 */ private void iniList(int num) { list = new Object[num]; for (int i =

数据结构与算法-总结线性表顺序存储结构的优缺点

这一章节主要总结线性表顺序存储结构的优缺点. 在总结之前,我们来讨论一下线性表顺序存储结构的执行方法的时间复杂度: 存储.读取:O(1) 插入.删除:O(n) 优点: 1.无需为表中的逻辑关系增加额外的存储空间 2.可以快速存取表中对象 缺点: 1.插入和删除需要移动大量的对象 2.存储设备的碎片化 3.当线性表过大的时候,很难确定长度 版权声明:本文为博主原创文章,未经博主允许不得转载.

数据结构例程——线性表顺序存储的应用

本文是数据结构基础系列网络课程(2):线性表中第6课时线性表顺序存储的应用中所讲的例程. 例:删除元素 问题:已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素. 要求:时间复杂度为O(n).空间复杂度为O(1)的算法 解法0:用基本运算实现,不满足复杂度要求 (注:本文中所需要的list.h和list.cpp见点击参照-) #include "list.h" #include <stdio.h> void delnode1(SqList *

数据结构之线性表-顺序存储

本人文笔较差,语文从来不及格,基础不好,写此类文章仅供自己学习,理解队列及其他知识,高手大神请略过.参考书籍 <数据结构与算法分析-Java语言描述> 1.1 线性表简介 线性表是0个或多个元素的有限序列.即元素之间有顺序且有限.假设表中有元素A1,A2,A3,....,AN,若存在1<i<N,则 Ai 是 Ai-1的直接后继,Ai-1 是Ai的直接前驱.作为线性表,必须满足A1没有前驱,AN没有后继(有限性).N是线性表的长度.当N=0时,即表中没有任何元素也即空表. 1.2 线

线性表顺序存储结构的c语言实现

线性表顺序存储结构用C实现的操作 <1>声明一个线性表的顺序存储结构 <2> 初始化顺序线性表 <3>判断是否为空 <4>清空列表 <5>返回当前长度(线性表内元素个数) <6>返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 <7>返回L中第1个与e满足关系的数据元素的位序.若这样的数据元素不存在,则返回值为0 <8>在L中第i个位置之前插入新的数据元素e,L的长度加1 <9>

线性表—顺序存储结构

线性表——顺序存储结构 我理解的顺序存储就是 存储的一组元素在内存中呈线性排列,地址相邻,就像火车一样,每个车厢都可以看做是一个元素,元素门内首尾相连且地址相邻,书看的是高一凡老师的书,学完后自己写一下总结和体会,一来加深印象,二来可以方便自己复习. 顺序存储结构似乎都是用数组来实现的,也就是以数组为核心,外面加了许多很方便的操作(函数)进行封装,然后就说这叫[顺序存储结构]——数组的深加工之后的产品 顺序存储结构的基本功能有以下几个: name:     sqlist private: T *

03.线性表顺序存储(动态数组)

以下是用动态数组实现的线性表顺序存储 #include <stdio.h> #include <stdlib.h> #define LIST_INIT_SIZE 5//符号常量,代表线性表存储空间初始分配量 #define LIST_INCREMENT 10//符号常量,代表线性表存储空间的分配增量 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int ElemType;//ElemType这

线性表 顺序存储 链式存储 ---java实现

首先抽象出一个线性表抽象类(包含基本的增删操作) public abstract class MyAbstractList<E> { public abstract void add(E t); public abstract void add(int index,E t); public abstract void remove(); public abstract void remove(int index); public abstract int getCount(); public

数据结构-线性表顺序存储(c++)

数据结构-线性表顺序存储(c++) 2018-09-06 List.h  //头文件 1 #define OK 1 2 #define ERRO0R 0 3 #define TRUE 1 4 #define FALSE 0 5 #define MAXSIZE 20 //存储空间初始分配量 6 7 typedef int Status; //Status 函数结果状态码 8 typedef int ElemType; //ElemType 据具体情况而定 9 10 class SqList 11