精华内容
下载资源
问答
  • 删除线性表中同一个元素z 方法一:重建法 从左向右遍历线性表,找到不是z的元素,把这些元素放到新的线性表中;新的线性表可以以原线性表为基础建立。 void delnode(Sqlist *&l,Elem type z) { int i,k=0; //k...

    删除线性表中同一个元素z

    方法一:重建法
    从左向右遍历线性表,找到不是z的元素,把这些元素放到新的线性表中;新的线性表可以以原线性表为基础建立。

    void delnode(Sqlist *&l,Elem type z)
    {
       int i,k=0;    //k记录不等于元素z的个数
       for(i=0;i<l->length;i++)
          if(l->date[i]!=z)//若元素不等于z时,把元素插入到新l中
          {
            l->date[k]=l->date[i];
            k++;//插入一个元素k加一
          }
          l->length=k;//线性表的长度为k
    
    }

    方法二:迁移法
    从左遍历线性表,找到元素z并用k来记录它的个数,用z后面的元素迁移到z的位置取代它。

    void delnode(sqlist*&l,Elem type z)
    {
      int k=0,i;//k来记录元素为z的个数
      for(i=0;i<l->length;i++)
         {
           if(l->date[i]==z)//若元素等于z则k加一
              k++;
           else
              l->date[i-k]=l->date[i];//若元素不等于z是,使元素前移k
         }
    }
    展开全文
  • 有一个线性表存放在一个一维数组中的前n个数组元素位置。请编写一个顺序表的程序,将这个线性表原地逆置 输入 6 3 2 1 5 3 4 输出 3 2 1 6 3 4 4 3 6 1 2 3 #include<bits/stdc++.h> using namespace std;...


    关注公众号程序猿从入门到入土查询更方便哦

    设有一个线性表存放在一个一维数组中的前n个数组元素位置。请编写一个顺序表的程序,将这个线性表原地逆置

    输入

    6
    3 2 1 5 3 4
    

    输出

    3 2 1 6 3 4
    4 3 6 1 2 3
    
    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n;
        while(cin>>n){				
            int *arr=new int[n];			//new一个数组
            int temp;
    
            for(int i=0;i<n;i++){			//输入
                cin>>arr[i];
            }
    
            for(int i=0;i<n;i++){			//正序输出
                cout<<arr[i]<<" ";
            }
            printf("\n");
            for(int i=0;i<n/2;i++){			//逆置
                temp=arr[i];
                arr[i]=arr[n-i-1];
                arr[n-1-i]=temp;
            }
    
            for(int i=0;i<n;i++){		//输出
               cout<<arr[i]<<" ";
            }
            printf("\n");
        }
        return 0;
    }
    
    
    展开全文
  • 获取线性表元素

    2019-08-26 20:39:44
    实现GetElem的具体操作,即将线性表L中的第i位置的元素返回 。 //得到线性表第i个元素 //得到线性表第i个元素 typedef int Status; Status GetElem(sqlist l,int i,Status *e) { if((l.length==0)||(i<1)||(i&...

    获得元素的操作

    实现GetElem的具体操作,即将线性表L中的第i个位置的元素返回 。
    //得到线性表第i个元素
    //得到线性表第i个元素
    typedef int Status;
    Status GetElem(sqlist l,int i,Status *e)
    {
    	if((l.length==0)||(i<1)||(i>l.length))
    	{
    		return err;
    	}
    	e=&(l.data(i-1));
    	return ok;
    }
    
    展开全文
  • 线性表一

    2017-04-01 11:17:13
    线性表中,除了第一个元素没有直接前驱元素,最后一个元素没有直接后继元素以外其他元素且仅有一个直接前驱和后继元素。若将线性表记作(a1,a2…ai-1,ai+1,…an)则表中ai-1领先于ai,ai领先于ai+1

    线性表:
    零个或多个数据元素的有限序列。

    线性表的定义

    线性表是零个或多个数据元素的有限序列。有限说明线性表不是无穷无尽的,是有一定长度的,序列说明线性表的元素之间是有顺序的。在线性表中,除了第一个元素没有直接前驱元素,最后一个元素没有直接后继元素以外其他元素都有且仅有一个直接前驱和后继元素。

    若将线性表记作(a1,a2…ai-1,ai+1,…an)则表中ai-1领先于ai,ai领先于ai+1,我们称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,3…n-1时,ai有且仅有一个直接前驱和一个直接后继元素。

    当线性表的元素个数n = 0时,线性表为空,我们称之为空线性表。

    线性表的抽象数据模型

    ADT 线性表(List)
    Data
           {a1,a2...an}         //数据元素之间的关系为一对一
    Operation
           InitList(* L):       //初始化操作,创建一个空的线性表
           ListEmpty( L):       //若为空返回true,否则返回false
           ClearList:           //清空当前的线性表
           GetElement( L,i,*e): //将线性表L中第i个位置的元素返回给e
           IsEqualElement(L,e): //在线性表L中查找与给定值e相等的元素存不存在,若存在返回其所在位置不存在返回0
           ListInsert(*L,i,e):  //在线性表L中第i个位置插入元素e
           ListDelete(*L,i,*e): //在线性表L中删除第i个位置的元素,并用e返回其值
           ListLength(L):       //返回线性表中元素的个数
    endADT

    线性表的顺序存储结构

    用一段连续的地址存储单元依次存储线性表的数据元素,我们可以使用以为数组来实现顺序线性表。

    定义一个顺序存储结构的线性表

    #define MAXSIZE 100   //存储空间的初始分配量
    typedef int ElemType; //ElemType类型根据实际需要而确定
    typedef struct 
    {
        ElemType data[MAXSIZE]; //用数组存储数据元素,最大值为MAXSIZE
        int      length;
    }myList;

    要描述一个顺序存储结构线性表需要是那个属性

    • 存储空间的起始位置
    • 线性表的最大存储容量MAXSIZE
    • 当前线性表的长度length
      注:在任意时刻线性表的长度应当小于或等于其最大的存储量

    随机存取结构

    存储数据或者读取数据的时间性能为O(1)的存储结构。顺序结构的线性表就是一种随机存取结构。

    顺序存储结构的插入和删除

    首先,我们先来获取一下顺序存储结构线性表中第i个位置的元素吧,话不多说上代码:

    void getElement(myList *l,int i){
        if (l -> length == 0){
            printf("线性表为空\n");
            return ;
        }
        if (i > MAXSIZE || i < 0){
            printf("查找位置不合法\n");
            return ;
        }
        printf("在下标为%d的位置找到元素%d\n",i,l -> data[i]);
        return ;
    }

    现在我们来看下插入操作

    首先来看下思路

    • 插入位置不合理,插入失败
    • 如果线性表已满,插入失败
    • 从最后一个元素开始遍历到索要插入的位置,分别将其向后移动一个位置
    • 插入元素
    • 表长加1
      根据上面的思路不难写出如下代码:
    myList *insertList(myList *l,int i,ElemType e){
        int k;
        if (l -> length == MAXSIZE){
            //顺序线性表已经满
            printf("线性表已满,无法插入!");
            return l;
        }
        if (i < 0 || i > l -> length){
            //插入位置不合法
            printf("插入位置不合法,无法插入!");
            return l;
        }
        if (i >= 0 && i <= l -> length){
            //插入位置合法
            for(k = l -> length;k >= i;k --){
                //从后往前遍历插入
                l -> data[k] = l -> data[k - 1];
            }
            //将新元素插入
            l -> data[i] = e;
            l -> length++;
            return l;
        }
        return l;
    }

    删除操作也是很简单的

    同样我们看下删除操作的思路:

    • 线性表为空,无法删除元素
    • 删除位置不合理,删除失败
    • 去除要删除的元素
    • 从删除的位置向后遍历直至最后一个元素位置,向前移动元素
    • 表长减1
      同样不难写出如下代码:
    myList *deleteList(myList *l,int i){
        int k;
        if (l -> length == 0){
            //线性表为空
            printf("线性表为空,删除失败\n");
            return l;
        }
        if (i < 0 || i > l -> length){
            printf("删除位置不合法,删除失败\n");
            return l;
        }
        if (i < l -> length){
            //删除位置合法
            for(k = i;k < l -> length;k ++){
                //从前往后遍历删除
                l -> data[k-1] = l -> data[k];
            }
        }
        l -> length --;
        return l;
    }

    总结

    线性表顺序存储结构的优缺点
    优点:
    1.无需为表示表中的元素之间的逻辑关系而增加额外的存储空间
    2.可以以O(1)的时间复杂度存取数据
    缺点:
    1.插入、删除需要移动大量元素
    2.当长度变化大时难以确定存储空间容量
    3.容易造成存储空间的浪费

    点我从github上下载代码

    展开全文
  • 先要对线性表进行初始化,使用一个for循环即可,然后查找出线性表中第一个比当前要插入的元素大的位置,然后将元素插入到前面就可以了 具体的代码如下: #include <iostream> #define maxSize 11 using ...
  • 线性表删除元素

    千次阅读 2018-08-13 08:54:03
    1197: 线性表删除元素 时间限制: 1 Sec 内存限制: 128 MB 提交: 14 解决: 13 ...输入包括:输入元素个数,以及相应的线性表元素,以及要删除的位置 输出 输出删除后的线性表 样例输入 5 1 2 3 4 5 3...
  • 线性表插入元素

    千次阅读 2018-08-13 08:51:14
    线性表的顺序存储中,态存储,请用动态存储形式实现线性表的创建和插入某个元素,并显示输出结果 输入 输入包括:首先输入线性表元素的个人,然后输入相应的元素,输入插入的位置以及元素 输出 输出插入相应...
  • 用链式存储结构建立十个元素元素的值为正整数,元素的值用scanf函数输入)的线性表,输出线性表的所有元素。然后删除第四个元素,再输出该线性表的所有元素
  • 线性表

    2019-10-15 19:22:15
    线性表的概念及其抽象数据类型定义 线性表的逻辑结构 线性表(LinearList)描述:线性表...例如,英文字母表(A,B,……,Z)就是一个简单的线性表,表中的每一个英文字母就是一个数据元素,每个元素之间存在唯一的...
  • 线性表的基本操作,插入删除,输出线性表内容,输出两个线性表的相同元素,判空,判满,查找指定位置元素,查找指定元素位置,线性表的初始化
  • 定义一个线性表接口

    2014-11-26 18:27:45
    //判断是否为空,长度,返回元素,插入,最尾插入,删除,返回全部,查找相似package DataStructureTest; ...//声明一个线性表长度 T get(int i);//根据索引i,当前索引下返回T void set(int i ,T
  • //在一个递增有序的线性表L中插入一个值为x的元素,并保持其递增有序特性 bool listInsert(node* L, elementType x) { node* p = L->next; node* s = new node;// 创建一个新节点 s->data = x;//装入数据 ...
  • 已知一个顺序存储的线性表A,其中的元素按值非递减有序排列,编写一个算法,使得插入一个元素x后保持该线性表仍按递减有序排列。 直接上代码: #include<stdio.h> #include<stdlib.h> #define MAXSIZE ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,902
精华内容 33,560
关键字:

对于一个有11个元素的线性表