精华内容
下载资源
问答
  • 已知长度为n线性表A采用顺序存储结构,请写一个时间复杂度O(n)、空间复杂度O(1)的算法,该算法可删除线性表中所有值item的数据元素。

    C语言
    运行结果:
    在这里插入图片描述
    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #define OK 1
    #define ERROR -1
    #define MAXSIZE 10
    typedef int Stauts;
    typedef int ElemType;
    typedef struct 
    {
    	ElemType *elem;
    	int length;
    	int listsize;
    }SqList;
    Stauts InitList(SqList &A)
    {
    	A.elem = (ElemType*)malloc(MAXSIZE*sizeof(ElemType));
    	if(!A.elem)  exit(ERROR);
    	A.length = 10;
    	A.listsize = MAXSIZE ;
    	return OK;
    }
    
    Stauts ListDelete(SqList &A,int item)
    {
    	int j=0,i;
    	while(j<A.length)
    	{
    		if(item == A.elem[j])
    		{
    				for(i = j; i < A.length; i++)
    				
    			A.elem[i] = A.elem[i+1];
    		A.length=A.length-1;
    		}
    				
    		j=j+1;
    	}
    	return OK;
    }
    int main()
    {
    	int i;
    	int item ;
    	SqList A;
    	if(InitList(A)) 
    		printf("构建成功\n");
    		printf("当前数据为\n");
    		for(i = 0;i < A.length;i++)
    		{
    			A.elem[i] = i;
    			printf("%6d",A.elem[i]);
    	}
    	printf("\n");
    	printf("请输入要删除的数值");
    	scanf("%d",&item);
    	ListDelete(A,item);
    	
    	printf("删除%d后的数据\n",item);
    	for (i = 0 ;i < A.length; i++)
    		printf("%6d",A.elem[i]);
    	printf("\n");
    	return 0;
    }
    
    展开全文
  • #include <stream> using namespace std; typedef int ElemType;// 自定义了一个数据类型Elemtype,这里定义的Elemtype和int型是一样的 ...typedef struct//typedef是定义类型的意思, ...//存储空间的基地址 ...
    #include   <stream>
    using namespace std;
    typedef int ElemType;// 自定义了一个数据类型Elemtype,这里定义的Elemtype和int型是一样的
    //定义
    #define MAXSIZE 100
    typedef struct//typedef是定义类型的意思, 
    {
    ElemType *elem;//存储空间的基地址 , 用“elemtype”代表所有可能的数据类型,简单明了的概括了整体。在算法中,除特别说明外,规定ElemType的默认是int型。
    int length;//当前长度 
    }SqList;//sqlist代表上面的结构体类型 ,顺序表的顺序存储结构类型为sqlist 
    //创建
    void CreateList(SqList &L)//构造一个空的线性表L 
    {
        int i;
        L.elem=new ElemType[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间 ,使elem指向这段空间的基地址 ,L.elem是一个指针变量 
        if(!L.elem) cout<<"创建失败!"<<endl;//存储分配失败退出 
        cout<<"请输入线性表的长度,不能大于"<<MAXSIZE<<':'<<endl; cin>>L.length;
        cout<<"请依次输入表中元素:"<<endl;
        for(i=0;i<L.length;i++)
            cin>>L.elem[i];//从头到尾依次输入每个元素 
        cout<<"创建完成!"<<endl;
    }
    //输出表
    void display(SqList L)
    {
        int i;
        cout<<'[';
        for(i=0;i<L.length;i++)
            {if (i==L.length-1)cout<<L.elem[i];
            else cout<<L.elem[i]<<',';}//控制输出的格式 即数据的两个有括号 
        cout<<']'<<endl;
    }
     
    void ChooseList_L(SqList &L,int item)
    {
        int i=0;int j=0;int k;int count=0;
        for(k=0;k<L.length;)
        {
            if(L.elem[k]!=item)
            {
                L.elem[j]=L.elem[i];
                i++;
                j++;
                k++; 
            }
            else
            {
                i++;
                 k++; 
                count++;
            }//i,k的数值一直保持相等,j中的数值才是满足题意的数值 
     
        }
        L.length-=count;
         cout<<"线性表中与item相等的数值的个数为:"<<endl;
        cout<<count<<endl;
    	 
    }
    int main()
    {
        SqList L;int item;
     
        CreateList(L);//线性表L已经存在?????、/、/、???????/、??、、、? 
        cout<<"当前线性表为:"<<endl;
        display(L);
     
        cout<<"删除表中所有值为item的数据元素,请输入item:"<<endl;
        cin>>item;
     
        ChooseList_L(L,item);
     
        cout<<"选择删除后线性表为:"<<endl;
        display(L);
     
        return 0;
    }
    //1、结构体用法
    //struct Student{
    //int age;
    //char s;
    //}
    //如果要定义一个该结构体变量,就需要:struct Student st1;
    //有没有觉得很麻烦,我们隐隐约约察觉到,多写一个struct很费劲,因此才有了下面的typedef
    //2、如果我们使用
    //typedef struct Student{
    //int age;
    //char s;
    //}Stu
    //那么我们定义该结构体变量的时候,就可以使用
    //Stu st1;
    //有没有觉得很省事,的确是这样。但是,还可以更省事,请看下面:
    //3、
    //我们也可以直接省略掉Student
    //typedef struct{
    //int age
    //char s;
    //}Stu;
    //就可以直接使用 Stu st1;
    
    
    
    展开全文
  • *题目:已知长度为n线性表A采用顺序存储结构,请写一个时间复杂度o(n)、空间复杂度o(1)的算法, * 该算法可删除线性表中所有值item的数据元素。 *编译环境:VC 6.0 */ #include &lt;stdio.h&gt; #...
    /*数据结构与算法-第二章线性表课后习题
    *课本第53页2.10
    *题目:已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为o(n)、空间复杂度为o(1)的算法,
    *     该算法可删除线性表中所有值为item的数据元素。
    *编译环境:VC 6.0
    */
    #include <stdio.h>
    #include <stdlib.h>
    #define ERROR -1
    #define MAXSIZE 5
    #define OVERFLOW -1
    #define OK 1
    #define listIncrement 2
    #define num_stop -1
    typedef int elemType;
    
    typedef struct
    {
    	elemType *elem;
    	int length;
    	int listsize;
    }Sqlist;
    int initList(Sqlist &list)
    {
    	list.elem=new int[MAXSIZE];
    	if(!list.elem)
    		exit(OVERFLOW);
    	list.length=0;
    	list.listsize=MAXSIZE;
    	return OK;
    }
    int ListInsert(Sqlist &list,int i,int num)
    {
    	int *newbase;
    	if(i<1)return ERROR;
    	if(list.length==list.listsize)//即将超越数组大小时重新动态分配数组大小
    	{
    		newbase=(int*)realloc(list.elem,(list.listsize+listIncrement)*sizeof(int));
    		if(!newbase)
    			exit(OVERFLOW);
    		list.elem=newbase;
    		list.listsize+=listIncrement;
    	}
    	list.elem[i-1]=num;
    	++list.length;
    	return OK;
    }
    void printList(Sqlist list)/*用于测试数据是否存储入顺序表*/
    {
    	for(int k=0;k<list.length;k++)
    		printf("%d ",list.elem[k]);
    }
    void deleteList(Sqlist &list,int num)
    {
    	int len=list.length;
    	elemType *str=list.elem;
    	int front=0;
    	while(front<len)
    	{
    		while(front<len && str[front]!=num)
    			front++;//值不为num时,指针右移,为从顺序表开头一直顺数到为num的元素
    		if(front<len)
    			while(front<len && str[len]==num)
    				len--;//为需要删除的数字时,线性表长度减1,为从顺序表尾部删除尾部连续的为num的元素
    		if(front<len)
    		{
    			str[front]=str[len-1];//题目仅要求删去值为num的元素,并未要求元素顺序排列不变,因此大胆猜想将靠后的元素往前移动
    			front++;//前指针右移
    			len--;//后指针左移
    			list.length--;//变换一次,顺序表长度-1
    		}
    	}
    }
    int main()
    {
    	Sqlist list1;
    	int flag;
    	int num,count=0;
    	flag=initList(list1);
    	printf("请输入若干数字,并以%d结束:",num_stop);
    	scanf("%d",&num);
    	count++;
    	while(num!=-1)
    	{
    		flag=ListInsert(list1,count,num);
    		scanf("%d",&num);
    		count++;
    	}
    	printList(list1);printf("\n");
    	printf("需要删除的数字为:");
    	scanf("%d",&num);
    	deleteList(list1,num);
    	printf("删除后的线性表为:");
    	printList(list1);
    	printf("\n");
    	return 0;
    }
    
    展开全文
  • 已知长度为n线性表A采用顺序存储结构,请写一尽可能高效的算法,删除线性表中所有值item的数据元素 直接上代码 void DeleteItem (Sqlist *L,int item) { int i=0,j=0,count=0; for(i=0;i<L->length;) ...

    已知长度为n的线性表A采用顺序存储结构,请写一尽可能高效的算法,删除线性表中所有值为item的数据元素

    直接上代码

    void DeleteItem (Sqlist *L,int item)
    {
       	int i=0,j=0,count=0;
    	for(i=0;i<L->length;)
        {
            if(L->elem[i] == item)
            {
                i++;//下一个节点下标
                count++;//数据为item的个数
            }
            else
            {
                L->elem[j] = L->elem[i];//j为需要插入元素的下标
                i++;
                j++;
            }
        }
        L->length -= count;//更改表长
    }
    
    
    展开全文
  • 为了方便描述过程,假定一个线性表结构体ArrayList typedef struct ArrayList{ int data[N]; int index;//初始值-1,代表里面没有元素,使用时代表下标。 }*List; 第一种方法:顺序双指针法 指针i控制向...
  • 已知长度为n线性表A采用顺序储存结构,请写出一个时间复杂度O(n),空间复杂度O(1)的算法,该算法可删除线性表中的所有值item的数据元素。 源代码: #include <stdio.h> #include <stdlib.h> #...
  • /** * @author:(LiberHome) * @date:Created in 2019/2/27 23:34 .../*已知长度为n线性表采用顺序结构,写一算法删除该线性表中所有值item的元素*/ public class page06 { public static void mai...
  • #include<iostream> using namespace std; typedef struct { int *elem; int length; }SqList; void CreateList(SqList &L,int n) { for(int i=0;...n;... L.length=n;...void Delete_e(SqList &a
  • =0)个数据元素的有限序列,其中n为表长,当 n 等于 0 时线性表是一个空表。若用L命名线性表,则其一般表示为           L= (a1, a2, a1, … ,ai+l, … ,an) 式中,a1是唯一的 “第一个” 数据元素,又称...
  • 线性表顺序存储结构-顺序表

    千次阅读 2018-08-09 12:10:59
    线性表顺序存储结构-顺序表 一. 在C/C++语言中,借助数组类型来实现顺序表,也就是说,用数组存放线性表的元素及其逻辑关系,数组的基本类型就是线性表中元素的的类型,数组大小(即数组上界-下界+1)要...
  • 线性表--顺序存储结构

    千次阅读 2018-03-08 14:05:00
    一、线性表的顺序存储结构 线性表有两种物理存储结构:顺序存储结构和链式存储结构。 顺序存储结构 ①定义: 用一段地址连续的存储单元依次存储线性表的数据元素。...③线性表顺序存储结构...
  • 已知长度为 n线性表 A=(a1,a2,…,an­1 , an) 采用顺序存储结构。编写一算法, 将线性表原地转换 A’=( an,an­1,…,a2,a1),要求转换过程中用尽可能少的辅助空间。 void Reverse(Elemtype A[], int n){...
  • (1) 线性表的定义。 零个或多个数据元素的有限序列 序列线性表中有直接后继元素,有且仅有一个直接后继,有且...ListEmpty(L)://若线性表为空,返回true,否则返回Falser GetElme(L,i,e)://将线性表L中的第...
  • 那么这一篇博客我们就来说说线性表的两种物理结构中的第一种—顺序存储结构。 一、顺序存储定义 线性表顺序存储结构指的是用一段地址连续的存储单元依次线性表的数据元素。顺序存储的示意图如下: 二、线性表的...
  • 线性表中的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 2.地址计算方法 线性表的第i个元素是要存储在数组下标i-1的位置。 假设占用的是c个存储单元,那么线性表中的第i+1个数据...
  • **已知长度为n (n) 的线性表A采用顺序存储结构,请写一时间复杂度0(n)、空间复杂度0(1)的算法,该算法删除线性表中所有值item的数据元素。(O(1)表示算法的辅助空间常量)。** 我的代码如下: ``` #...
  • 数据元素存储主要形式有顺序存储结构、链式存储结构 。本节将介绍线性表线性表的顺序存储。因内容过多,链式存储将单独写在后一篇文章里。 一、线性表概念及其抽象数据类型 前一篇在介绍复杂度时,我们举出了...
  • 文章目录线性表线性表的抽象数据结构类型线性表的顺序存储结构顺序存储定义顺序存储方式顺序存储插入与删除线性表顺序存储结构的优缺点优点缺点完整代码 线性表 线性表:零个或多个数据元素的有限序列。 线性表分为 ...
  • printf("线性表长度大于数组长度\n"); return ERROR; } if (i<=L->iLength) /*若插入位置不在表尾*/ { for (int k=L->iLength;k>=i;k--) /*从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一...
  • 数据结构之线性表线性表顺序存储结构-----------顺序表基本运算 线性表顺序存储结构-----------顺序表 值传递:实参到形参,不改变内部参数。 指针传递(占空间):形参指向实参的地址,影响函数内部参数。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,932
精华内容 1,572
关键字:

已知长度为n的线性表a采用顺序存储结构