精华内容
下载资源
问答
  • 线性表顺序存储结构

    2019-04-22 18:59:23
    线性表顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素 顺序存储结构需要的三个属性 存储空间的起始位置:数组data,它的存储位置就是存储空间的位置 线性表最大存储容量:数组长度...

    顺序存储定义
    线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素
    在这里插入图片描述
    顺序存储结构需要的三个属性
    存储空间的起始位置:数组data,它的存储位置就是存储空间的位置
    线性表最大存储容量:数组长度MaxSize
    线性表的当前长度:length
    在这里插入图片描述
    数据长度与线性表长度区别
    数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般是不会变的
    线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的
    在这里插入图片描述

    顺序存储结构的插入和删除
    插入操作
    在这里插入图片描述
    插入算法的思路
    如果插入的位置不合理,抛出异常
    如果线性表长度等于数组长度,则抛出异常或动态增加容量
    从最后一个元素开始向前遍历第i个位置,分别将他们都向后移动一个位置
    将要插入元素填入位置i处
    表长加一
    在这里插入图片描述
    删除操作
    在这里插入图片描述
    删除算法思路
    如果删除的位置不合理,抛出异常
    取出删除元素
    从删除元素开始遍历最后一个元素位置,分别将他们都向前移动一个位置
    表长减一
    在这里插入图片描述
    线性表顺序存储结构的优缺点
    在这里插入图片描述

    展开全文
  • 主要介绍了C语言线性表顺序存储结构实例详解的相关资料,需要的朋友可以参考下
  • c代码-线性表顺序存储结构
  • 4.线性表顺序存储结构.pdf
  • C++数据结构 线性表顺序存储结构实现通讯录
  • 线性表顺序存储结构完整可执行代码

    千次阅读 多人点赞 2015-05-09 21:53:32
    线性表顺序存储结构完整可执行代码
    #include <stdio.h>
    #include <stdlib.h>
    #include<time.h>
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    
    #define MAXSIZE 20 /* 存储空间初始分配量 */
    typedef int ElemType;   /* ElemType类型根据实际情况而定,这里假设为int */
    typedef int Status;     /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
    
    typedef struct
    {
      ElemType data[MAXSIZE]; /* 数组,存储数据元素 */
      int length;             /* 线性表当前长度 */
    }SqList;
    
    /* 初始化顺序线性表 */
    Status InitList(SqList *L)
    {
        L->length=0;
        return OK;
    }
    
    //顺序表的建立
    SqList Create(SqList L)
    {
        int i;
        srand((unsigned)time(NULL));
      for(i=0; i < 10; i++)
      {
        L.data[i] = rand()%100;
            L.length++;
      }
        return L;
    }
    
    /* 初始条件:顺序线性表L已存在。*/
    /* 操作结果:将L重置为空表 */
    Status ClearList(SqList *L)
    {
        L->length = 0;
        return OK;
    }
    
    
    /*初始条件:ListTraverse函数调用 */
    /*操作结果:打印对应元素 */
    Status visit(ElemType c)
    {
        printf("%d ",c);
        return OK;
    }
    
    /* 初始条件:顺序线性表L已存在 */
    /* 操作结果:依次对L的每个数据元素输出 */
    Status ListTraverse(SqList L)
    {
      int i;
        for(i=0;i < L.length;i++)
            visit(L.data[i]);
        printf("\n");
        return OK;
    }
    
    /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */
    /* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
    Status ListInsert(SqList *L,int i,ElemType e)
    {
      int k;
      if (L->length==MAXSIZE)  /* 顺序线性表已经满 */
        return ERROR;
      if (i < 1 || i>L->length+1)/* 当i比第一位置小或者比最后一位置后一位置还要大时 */
        return ERROR;
    
      if (i <= L->length)        /* 若插入数据位置不在表尾 */
      {
        for(k=L->length-1;k>=i-1;k--)  /* 将要插入位置之后的数据元素向后移动一位 */
          L->data[k+1]=L->data[k];
      }
      L->data[i-1]=e;          /* 将新元素插入 */
      L->length++;
    
      return OK;
    }
    
    /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
    /* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */
    Status ListDelete(SqList *L,int i,ElemType *e)
    {
        int k;
        if (L->length==0)               /* 线性表为空 */
        return ERROR;
        if (i < 1 || i>L->length)         /* 删除位置不正确 */
            return ERROR;
        *e=L->data[i-1];
        if (i < L->length)                /* 如果删除不是最后位置 */
        {
            for(k=i; k < L->length; k++)/* 将删除位置后继元素前移 */
          L->data[k-1]=L->data[k];
        }
        L->length--;
        return OK;
    }
    
    /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
    /* 操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */
    Status GetElem(SqList L,int i,ElemType *e)
    {
        if(L.length==0 || i < 1 || i>L.length)
            return ERROR;
        *e=L.data[i-1];
    
        return OK;
    }
    
    /* 初始条件:顺序线性表L已存在 */
    /* 操作结果:返回L的长度。 */
    int ListLength(SqList L)
    {
        return L.length;
    }
    
    /* 初始条件:顺序线性表L已存在 */
    /* 操作结果:若L为空表,则返回TRUE,否则返回FALSE */
    Status ListEmpty(SqList L)
    {
        return (L.length == 0)? TRUE : FALSE;
    }
    
    /* 初始条件:顺序线性表L已存在 */
    /* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */
    /* 若这样的数据元素不存在,则返回值为0 */
    int LocateElem(SqList L,ElemType e)
    {
        int i;
        if (L.length==0)
            return 0;
        for(i=0;i < L.length;i++)
        {
            if (L.data[i]==e)
                break;
        }
        if(i>=L.length)
            return 0;
    
        return i+1;
    }
    
    int main()
    {
        SqList L;
        ElemType e;
        Status i;
        int opp;
        int j,k;
        int pos;
        ElemType value;
    
        i=InitList(&L);
        printf("初始化成功,L.length=%d\n",L.length);
        printf("\n1.遍历线性表 \n2.线性表赋值 \n3.清空线性表 \n4.线性表插入 \n5.查找表中元素 \n6.判断元素是否在表中 \n7.删除某个元素 \n8.线性表长度\n9.线性表是否为空\n0.退出 \n请选择你的操作:\n");
        while(opp != 0){
            scanf("%d",&opp);
            switch(opp){
                case 1:
                    ListTraverse(L);
                    printf("\n");
                    break;
    
                case 2:
                    L = Create(L);
                    printf("创建随机链表:L.data=");
                    ListTraverse(L);
                    printf("\n");
                    break;
    
                case 3:
                    i=ClearList(&L);
                    printf("清空L后:L.length=%d\n",L.length);
                    ListTraverse(L);
                    printf("\n");
                    break;
    
    
                case 4:
                    printf("请输入插入元素位置:");
                    scanf("%d",&pos);
                    printf("请输入插入元素的值:");
                    scanf("%d",&value);
                    i = ListInsert(&L,pos,value);
                    printf("插入完毕,现在线性表为:\n");
                    ListTraverse(L);
                    printf("\n");
                    break;
    
                case 5:
                    printf("你要查找第几个元素? ");
                    scanf("%d",&pos);
                    GetElem(L,pos,&e);
                    printf("第%d个元素的值为:%d\n",pos,e);
                    break;
    
                case 6:
                    printf("输入你想知道是否在表中的数值: ");
                    scanf("%d",&e);
                    k=LocateElem(L,e);
                    // 这里假定随机数组中的元素互不重复
                    if(k)
                        printf("值为%d是表中的第%d个元素\n",e,k);
                    else
                        printf("没有值为%d的元素\n",e);
                    break;
    
                case 7:
                    printf("要删除第几个元素?");
                    scanf("%d",&pos);
                    ListDelete(&L,pos,&e);
                    printf("删除完毕,现在线性表为:\n");
                    ListTraverse(L);
                    printf("\n");
                    break;
    
                case 8:
                    k = ListLength(L);
                    printf("线性表的长度为: %d \n", k);
                    break;
    
                case 9:
                    i = ListEmpty(L);
                    if (i)
                        printf("该线性表为空.\n");
                    else
                        printf("该线性表非空\n");
                    break;
    
                case 0:
                    exit(0);
            }
        }
    }
    展开全文
  • 线性表顺序存储结构的优点 易于随机存取任意一个元素 线性表顺序存储结构的缺点 插入和删除需要移动大量的元素,很麻烦 代码实现 #include<bits/stdc++.h> using namespace std; #define Maxn 1000 typedef ...

    线性表顺序存储结构的优点

    易于随机存取任意一个元素

    线性表顺序存储结构的缺点

    插入和删除需要移动大量的元素,很麻烦

    代码实现

    #include<bits/stdc++.h>
    using namespace std;
    #define Maxn 1000
    typedef struct{//顺序存储结构的定义 
        int date[Maxn];
        int len;
    }Sqlist;
    
    void InitSqlist(Sqlist &sq){//初始化线性表 
        sq.len=0;
    }
    
    int GetLength(Sqlist sq){//获得线性表长度 
        return sq.len;
    }
    
    int GetElem(Sqlist sq,int i){//获得第i个位置的元素 
        if(i<1||i>sq.len) return 0;//无效的位置
        else
        return sq.date[i-1]; 
    }
    
    int Locat(Sqlist sq,int x){//找出x在线性表的位置 
        int i=0;
        while(sq.date[i]!=x) {
            i++;
            if(i>=sq.len) return 0;
        }
        return i+1;
    }
    
    int InsElem(Sqlist &sq,int x,int i){//在第i个元素前插入元素 
        int j;
        if(i<1||i>sq.len+1) return 0;
        for(j=sq.len;j>=i;j--)
        sq.date[j]=sq.date[j-1];
        sq.date[i-1]=x;
        sq.len+=1;
        return 1;
    }
    
    int DeleElem(Sqlist &sq,int i){//删除第i个元素 
        if(i<1||i>sq.len) return 0;
        for(int j=i;j<sq.len;j++)
        sq.date[j-1]=sq.date[j];
        sq.len--;
        return 1;
    }
    
    void DisElem(Sqlist sq){//输出线性表的内容 
        int i;
        for(i=0;i<sq.len;i++)
        cout<<sq.date[i]<<' ';
        cout<<endl;
    }
    
    int main(){
        int n,i,x;
        cin>>n;
        Sqlist a;
        InitSqlist(a);
        for(i=1;i<=n;i++)
        {
            cin>>x;
            InsElem(a,x,i);
        }
        cout<<GetLength(a)<<endl;
        DisElem(a);
        cin>>x;
        cout<<Locat(a,x)<<endl;
        cin>>i;
        DeleElem(a,i);
        DisElem(a);
        cin>>i;
        cout<<GetElem(a,i)<<endl;
        return 0;
    } 

    转载于:https://www.cnblogs.com/mch5201314/p/9750650.html

    展开全文
  • 线性表顺序存储是指用一组地址连续的存储单元依次存放线性表中的各个元素,使得线性表中在结构上相邻的数据元素存储在相邻的物理存储单元中。 定义顺序存储结构如下所示: #define MAXSIZE =100 typedef struct ...

    线性表顺序存储是指用一组地址连续的存储单元依次存放线性表中的各个元素,使得线性表中在结构上相邻的数据元素存储在相邻的物理存储单元中。

    定义顺序存储结构如下所示:

    #define MAXSIZE =100
    typedef struct
    {
        int data[MAXSIZE];
        int length;
    } List
    线性表的顺序查找,找到元素则返回值元素的位置,如果没有找到返回0,
    int findListItem(List *L,int e){
    	int k;
    	for (k=0;k<L->length;k++)
    		if(L->data[k]==e)
    			return k+1;
    	return 0;
    }
    线性表的插入,首先要判断插入的位置是否合法,如果插入的i的位置,则i到length的元素要向后移动,然后把要插入的元素值插到i位置,然后增加length的长度

    int insListItem(List *L,int i,int e){
    	int k;
    	if (i<1||i>L->length+1)
    		printf("插入位置不合法");
    	if (L->length>=MAXSIZE)
    		printf("表已满无法插入");
    	for (k=L->length-1;k>=i-1;k--)
    		L->data[k+1] = L->data[k];
    	L->data[i-1] = e;
    	L->length++;
    	return 1;
    }
    线性表的删除元素,首先找到要删除的元素,如果没有找到返回error,否则删掉该元素,然后移动i到length的元素一位,顺序表长度减一。

    int delListItem(List *L,int i){
    	int k;
    	if (i<1||i>=L->length)
    		return 0;
    	for (k = i-1;k<L->length;k++)
    		L->data[k] = L->data[k+1];
    	L->length--;
    	return 1;
    }
    整合上面的操作。

    定义头文件seqListStruct.h

    #define MAXSIZE 100
    typedef struct{
    	int length;
    	int data[MAXSIZE];
    } List;
    int delListItem(List *L,int i);
    int insListItem(List *L,int i,int e);
    int findPelace;
    int findListItem(List *L,int e);
    定义删除文件delListItem.c

    #include "seqListStruct.h"
    int delListItem(List *L,int i){
    	int k;
    	if (i<1||i>=L->length)
    		return 0;
    	for (k = i-1;k<L->length;k++)
    		L->data[k] = L->data[k+1];
    	L->length--;
    	return 1;
    }
    定义插入元素文件insListItem.c
    </pre><pre name="code" class="plain">#include <stdio.h>
    #include "seqListStruct.h"
    int insListItem(List *L,int i,int e){
    	int k;
    	if (i<1||i>L->length+1)
    		printf("插入位置不合法");
    	if (L->length>=MAXSIZE)
    		printf("表已满无法插入");
    	for (k=L->length-1;k>=i-1;k--)
    		L->data[k+1] = L->data[k];
    	L->data[i-1] = e;
    	L->length++;
    	return 1;
    }
    定义查找元素文件findListItem.c

    #include "seqListStruct.h"
    
    int findListItem(List *L,int e){
    	int k;
    	for (k=0;k<L->length;k++)
    		if(L->data[k]==e)
    			return k+1;
    	return 0;
    }
    定义主函数main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "seqListStruct.h"
     int main()
    
     {
    	 List L;
    	 int i;
    	 //初始化线性表
    	 for (i=0;i<=10;i++)
    		 L.data[i] = i;
    	 L.length = 10;
    
    	 //执行删除线性表某个元素
    	 delListItem(&L,5);
    
    	 for (i =0;i<L.length;i++)
    		 printf("%d\n",L.data[i]);
    	 //执行插入线性表某个元素
    	 insListItem(&L,5,100);
    	 for (i=0;i<L.length;i++)
    		 printf("%d\n",L.data[i]);
    	 //执行查找线性表的某个元素
    	 findPelace = findListItem(&L,100);
    	 if (findPelace)
    		 printf("查找到元素位置在%d\n",findPelace);
    	 else
    		 printf("没有查找到元素\n");
    	 system("pause");
    	 return 0;
     }

    我们可以看到删除和插入操作的时间复杂度分别是(n-1)/2,n/2.查找操作的时间复杂度是1








    展开全文
  • 线性表顺序存储结构的操作及其应用实验,编写C语言描述的线性表操作的12种算法的顺序存储结构实现的代码;
  • 针对王红梅《数据结构》C++版教材。讲述第二章节线性表第二讲。顺序存储的相关内容。
  • 线性表顺序存储结构及运算,线性表的插入,删除
  • 这一章节主要总结线性表顺序存储结构的优缺点。在总结之前,我们来讨论一下线性表顺序存储结构的执行方法的时间复杂度:存储、读取:O(1)插入、删除:O(n)优点:1.无需为表中的逻辑关系增加额外的存储空间2.可以...
  • 线性表是一个有序序列,若元素存在多个,则第一...线性表有两种物理结构,第一种为顺序存储结构,另一种为链式存储结构。这一章先来利用C++实现顺序存储结构。 头文件声明lineartable.h #pragma once /* 线性...
  • 线性表顺序存储结构说白了就是数组,类定义了两个成员变量:一个足够大的数组和元素个数变量。下面是自己写的一个线性表类,可以直接使用或增加成员函数使用。 //linearlist.h #ifndef LINEARLIST_H #define LINEAR...
  • 数据结构实验报告,线性表顺序存储结构的操作及其应用 包括实验过程,实验目的,实验总结等详细内容,仅供大家学习交流!
  • 线性表顺序存储结构:指的是用一段地址连续的存储单元一次存储线性表中的数据元素,如下: 有了以上概念,我们可以使用一维数组来实现线性表顺序存储结构,  存储空间:T* m_marry  当前长度:int m_length ...
  • c语言线性表顺序存储结构详解

    千次阅读 2017-04-24 16:31:23
    1、 什么是顺序存储结构?...2、//线性表顺序存储结构// #include #include #define Max 80 //存储空间初始分配量 #define Increment 10 //存储空间分配增量typedef struct { int *elem; // 存储空间基地
  • 这一章节我们来看一下线性表顺序存储结构删除操作的简单实现package com.ray.testobject; public class Test { private Object[] list; public Object[] getList() { return list; } /** * 初始化list ...
  • 简单的线性表顺序存储的示例,代码主要完成在顺序存储中的插入及删除元素的操作。 本程序在VS2008下编译通过
  • 那么这一篇博客我们就来说说线性表的两种物理结构中的第一种—顺序存储结构。 一、顺序存储定义 线性表顺序存储结构指的是用一段地址连续的存储单元依次线性表的数据元素。顺序存储的示意图如下: 二、线性表的...
  • 在看《大话数据结构》的时候,里面诙谐的语言和讲解... 好了,不多说啦,今天是实现线性表顺序存储结构,首先我们来看看什么是线性表。  每次去食堂吃饭就会看到排的一条条的长队,其实每一条队伍就是一个线性表,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,482
精华内容 20,592
关键字:

线性表的顺序存储结构