精华内容
下载资源
问答
  • 2020-09-12 20:03:40

    适合初学数据结构,不明白如何通过代码实现顺序表。

    超简洁代码如下:

    /****************************************
    2020/10/16 第一次修改,顺序表结构定义的data是数组类型,应采用静态分配,模糊了静态分配与动态分配,已修改,错误程序L->data[10]=(int*)malloc(sizeof(int)*initsize);。
    ****************************************/
    
    #include <stdio.h>
    # define maxsize 50    //定义线性表的最大长度
    //顺序表结构的头文件(静态分配)
    typedef struct   //定义结构体
    {
    int data[maxsize];
    int length;
    }Sqlist;     //定义结构体变量名
    
    //初始化顺序表
    initlist(Sqlist* L)     //(sqlist &l)程序会报错
    {
    L->data[maxsize];       //顺序表的元素
    L->length =0;           //顺序表的当前长度
    }
    
    //自定义创建顺序表
    creatlist(Sqlist* L)
    {
    int i=0,c;
    printf("请输入顺序表元素:\n");
    while((scanf("%d",&c))!=EOF)  //不知道输入个数使用(scanf())!=EOF),输入后换行,ctrl+z,在换行
        L->data[i++]=c;
    L->length=i;
    printf("输入的顺序表元素:\n");
    for(i=0;i<L->length;i++)
        printf("%d ",L->data[i]);
    }
    
    void main()
    {
        Sqlist L;
        if(!initlist(&L))
            printf("初始化顺序表失败!");
        creatlist(&L);
        return 0;
    }
    

     

    更多相关内容
  • 主要为大家详细介绍了顺序表定义及python实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C语言顺序表初始化

    千次阅读 2021-02-24 18:26:58
    // 初始化数组方法 // 参数:一个SqList 指针,指针只能是一个结构体的地址。 Status Init_SqList( SqList *L ) { // 动态分配空间 c语言中数组需要分配空间 L->Elem_array[MAX_SIZE]=( ElemType * )malloc(MAX_...

    没学过C语言,将就着看着吧!

    #include<stdio.h>
    #include<math.h>
    // #define 定义一个标识符来表示一个常量
    #define  OK   1
    #define  ERROR   -1
    #define  MAX_SIZE  100
    //  typedef 关键字来定义自己习惯的数据类型名称
    typedef  int  Status ;
    typedef  int  ElemType ; 
    // struct 结构体
    typedef  struct  sqlist{   
    	// 定义一个数组
    	ElemType  Elem_array[MAX_SIZE] ;
    	// 数组的长度
        int length ;
    } SqList ;
    
    // 初始化数组方法
    // 参数:一个SqList 指针,指针只能是一个结构体的地址。
    Status Init_SqList( SqList *L ) 
    {  
    	// 动态分配空间 c语言中数组需要分配空间
        L->Elem_array[MAX_SIZE]=( ElemType * )malloc(MAX_SIZE*sizeof( ElemType )) ;
        // 如果数组为空,则报错;
        if ( !L -> Elem_array ) 
            return  ERROR ; 
        // 返回 ok,目前还不知道为什么要L->length= 0 ; 有大佬知道请评论;
        else {
            L->length= 0 ; 
            return OK ;  
        }  
    }
    
    展开全文
  • 顺序表计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中逻辑结构上相邻的数据元素存储相邻的物理存储单元中,即通过数据元素...

    顺序存储结构

    顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

    初始化

    使用顺序表存储数据:
    1.要申请足够大小的物理空间;
    2.顺序表申请的存储容量;
    3.顺序表的长度,也就是表中存储数据元素的个数;

    首先,我们要自定义顺序表,C语言代码实现如下:

    typedef struct Table{
    	int *head;		//声明动态数组
    	int length;		//记录表的当前长度
    	int size;		//记录表的分配容量(最大长度)
    	}table; 
    

    接下来是顺序表的初始化,要进行如下操作:
    1.给 head 动态数据申请足够大小的物理空间;
    2.给 size 和 length 赋初值;
    C语言代码实现如下:、

    #define Size 5		//顺序表申请空间的大小
    table initTable(){
    	table t;
    	t.head=(int*)malloc(Size*sizeof(int));	  //构造一个空的顺序表,动态申请存储空间
    	if(!t.head)		//如果申请失败,作出提示并安全退出程序
    	{
    		printf("初始化失败");
    		exit(0);
    	}
    	t.length=0;		//表的初始长度为0
    	t.size=Size;	//表的存储空间(最大长度)为Size
    	return t; 
    }
    

    输出奇数

    顺序表的初始化工作做好了,尝试做一个小操作:输出顺序表中的奇数

    #include<stdio.h>
    #include<stdlib.h>
    #define Size 5
    typedef struct Table{
    	int *head;		//声明动态数组
    	int length;		//记录表的当前长度
    	int size;		//记录表的分配容量(最大长度)
    	}table;  
    
    table initTable(){
    	table t;
    	t.head=(int*)malloc(Size*sizeof(int));	  //构造一个空的顺序表,动态申请存储空间
    	if(!t.head)		//如果申请失败,作出提示并安全退出程序
    	{
    		printf("初始化失败");
    		exit(0);
    	}
    	t.length=0;		//表的初始长度为0
    	t.size=Size;	//表的存储空间(最大长度)为Size
    	return t; 
    }
     
    //输出奇数 
    void displayOddNumber(table t){
    	int i;
    	printf("输出顺序表中的奇数:\n");
    	for(i=0;i<t.length;i++)
    	{
    		if(t.head[i]%2==1)
    		printf("%d\n",t.head[i]);
    	}
    	printf("\n"); 
    }
    int main()
    {
    	int i;
    	table t=initTable();     
    	//添加元素 
    	for(i=1;i<=Size;i++)
    	{
    		t.head[i-1]=i;
    		t.length++;
    	}
    	displayOddNumber(t);
    	return 0;
    }
    

    程序运行结果如下:
    在这里插入图片描述
    个人笔记,感谢阅读。
    在这里插入图片描述

    展开全文
  • 顺序表作为线性表最基本的一种结构。本文介绍了顺序表的定义和特点,然后给出了顺序表的常见各种操作和代码,包括了初始化、查找、插入、删除和归并(合并),并分析了程序的复杂度。


    在计算机的三大逻辑结构中,线性表是一种典型的线性结构。而顺序表又是一种最基础、最简单的线性表。

    一、顺序表的基本概念

    1.定义:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

    2.特点:将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。

    采用顺序存储结构的线性表简称为“== 顺序表==”。顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到: L O C ( a i ) = L O C ( a 1 ) + ( i − 1 ) ∗ L   1 ≤ i ≤ n LOC(ai)=LOC(a1)+(i-1)*L  1≤i≤n LOC(ai)=LOC(a1)+(i1)L 1in 其中, L L L是元素占用存储单元的长度。

    顺序表采用数组来存储线性表的元素,在C/C++语言中,静态数组需要先指定大小,但也可以动态地分配数组的大小(通过指针来引用数组中的元素,称为动态数组),严蔚敏的《数据结构》就是采用这种方式。

    二、顺序表算法

    2.1.顺序表的结构定义:

    设 MaxSize为一个整形常量,如果一个顺序表不会超过100个元素,则可以把 MaxSize定义为100:

    #define MaxSize   100
    

    在定义顺序表的顺序存储结构时,需要定义一个数组来存储线性表中的所有元素和定义一个整型变量来存储线性表的长度。假定数组用data[MaxSize]表示,长度整形变量用length表示,并采用结构体的形式表示,则元素类型为通用类型标识符ElemType的线性表的顺序存储类型可描述如下:

    //线性表的顺序储存结构
    
    typedef int ElemType;		   //定义ElemType为int类型
    
    typedef struct{
    	ElemType data[MaxSize];		//存放顺序表中的元素
    	int 	 length;					//存放顺序表当前的长度
    }SqList;						//声明顺序表的类型
    
    

    声明顺序表类型变量:

    SqList L;
    

    存储结构要体现数据的逻辑结构,顺序表的存储结构中,内存中物理地址相邻的结点一定具有顺序表中的逻辑关系。

    2.2顺序表的基本运算

    (1)初始化顺序表算法

    构造一个空的顺序表L。实际上只需要你将 length域设置为0即可。对应算法如下:

    //初始化当前顺序表长度为0
    void InitList(SqList &L){      //L回传给实参,用引用类型
    	L.length = 0;			   
    }
    
    

    本算法的时间复杂度为O(1)。

    (2)求顺序表中指定位置元素值的算法

    用e返回L中第i(1<=i<=L.length)的元素的值。对应算法如下:

    //返回L中第i个元素的值
    int GetElem(Sqlist L, int i, ElemType &e){
    	if(i<1 || i>L.length)                         //参数i错误时返回0
    		return 0;
    	else{
    		e = L.data[i-1];  
    		return 1;
    	}
    }
    

    本算法的时间复杂度为O(1)。

    (3)按元素值查找算法

    顺序查找第一个元素值等于e的元素的逻辑序号。若这样的元素不存在,则返回值为0.对应算法如下:

    //从顺序表中找到与给定的元素x相等的元素,若找到则返回序号,否则返回0
    int Locate(SqList L, ElemType e){
    	int i=0;
    	for(i=0;i<L.length, ++i){
    		if(L.data[i] =e)
    			return i+1;
    	}
    

    本算法的时间复杂度为O(n),空间复杂度为O(1),其中n为顺序表L的长度。

    (4)插入数据元素算法

    在顺序表L的第i(1<=i<=L.length+1)个位置上插入新的元素x。如果i值不正确,则返回0;否则将顺序表原来第i个元素以及以后的元素均后移一个位置,腾出一个空插入新元素,顺序表的长度加1.对应算法如下:

    //在顺序表中的第i-1个数据和第i个元素之间插入一个新的元素
    //在顺序表L中第i个元素之前插入新的元素x
    int ListInsert(SqList &L, int i, ElemType x){
    	int j=0;
    	if(i<1||i>L.length)
    		return 0;
    	for(j=L.length; j>i; j--)
    		L.data[j] = L.data[j-1];       //将i后面的元素向后移动一位
    	L.data[i-1] = x;                      //加入元素x
    	L.length++;                         //长度加一
    	return 1;
    }
    

    本算法的时间复杂度为O(n),空间复杂度为O(1),其中n为顺序表L的长度。

    (5)删除数据元素算法

    删除顺序表L的第i(1<=i<=L.length)个元素。如果i值不正确,则返回0;否则将顺序表第i个元素及以后的元素均前移动一个位置,这样就覆盖了原来的第i个元素,达到删除元素的目的,最后顺序表的长度减1.对应算法如下:

    //将顺序表的第i个元素ai删除,顺序表的长度减一
    //参数L需要回代,用引用的方式&,i为要删除元素的额位置
    int ListDelete(Sqlist &L, int i){
    	int j=0;
    	if(i<1||i>L.length)
    		return 0;
    	for(j=i; j<L.length; j++)
    		L.data[j-1] = L.data[j];
    	L.length--;
    	return 1;
    }
    
    

    本算法的时间复杂度为O(n),空间复杂度为O(1),其中n为顺序表L的长度。

    2.2 有序顺序表的归并算法

    当一个有序表(这里假设从小到大排列)采用顺序表存储时,称为有序顺序表。假设每个顺序表中元素不同,将两个具有相同次序的有序表归并为一个有序表的过程称为有序顺序表的归并,过程如下:
    在这里插入图片描述
    上图中,即为将顺序表A和B归并成C的结果。两个顺序表归并成一个顺序表称为二路归并,3个顺序表归并成一个顺序表称为三路归并,一次类推,这种思路应用于外排序中称为多路归并

    算法如下:

    //顺序表A和B按照非递减有序排列,将A和B合并到新的顺序表C中,且为非递减有序排列
    void merge(Sqlist A, Sqlist B, Sqlist &C){
    	int i,j,k=0;   //K记录c中元素的个数,i为A,j为B
    	while(i<A.length && j<B.length){		//是否有其中一个加入完成
    		if(A.data[i]<B.data[i]){
    			C.data[k] = A.data[i];
    			i++; k++;
    		}
    		else if(A.data[i]>B.data[j]){
    			C.data[k] = B.data[j];
    			j++; k++;
    		}
    		else{							//A.data[i] = B.data[i]
    			C.data[k] = A.data[i];
    			i++; k++;
    			C.data[k] = B.data[j];
    			j++; k++;
    		}	
    	}
    	while(i<A.length){				//B全部加入到C了,剩余的A中元素全部往C后面加入即可
    		C.data[k] = A.data[i];
    		i++;k++;
    	}
    	while(j<B.length){				//A全部加入到C了,同上
    		C.data[k] = B.data[i];
    		j++;k++;
    	}
    	C.length = k;		//C的长度
    }	
    

    本算法的时间复杂度为O(n+m),其中n、m分别为顺序表L1、L2的长度。空间复杂度为O(1),其中n为顺序表L的长度。将两个长度分别为m、n的递增有序顺序表合并成一个有序顺序表,最少的的比较次数为MIN(m,n)

    [下一篇]:数据结构之单链表的建立、删除、查找、插入、删除和归并(合并)(附C++程序)

    展开全文
  • 顺序表初始化---C语言描述

    千次阅读 2021-02-02 22:22:00
    #include <stdio.h> #include <stdlib.h>... //顺序表的当前长度 }SqList; //顺序表的类型定义 void InitList(SqList *p){ int i; for (i = 0; i < MaxSize; i++) { p->data
  • 顺序表初始化

    千次阅读 2021-10-04 16:21:11
    1.1. 顺序表初始化 顺序存储结构需要如下三个属性: 存储空间的起始地址:数组的起始地址 顺序表的最大存储容量:数组长度size 顺序表的当前长度,也就是表中存储数据元素的个数:length 自定义顺序表结构的C...
  • 数据结构-顺序表初始化

    万次阅读 多人点赞 2014-09-24 17:12:44
    //顺序表初始化 #include #include // #define OK 1; #define OVERFLOW -2 #define MAXSIZE 100//顺序表可能达到的最大长度  typedef int Status;//Status是函数的类型,其值是函数结果状态代码,如OK等 typedef...
  • 这是讲解代码中函数关系的Keynote 为了大家方便,已转换为ppt 博客地址blog.csdn.net/u012350104
  • 数据结构代码,方便初学者学习顺序表初始化以及相关操作,为数据结构编码打下基础
  • 数据结构—顺序表初始化

    千次阅读 2018-08-18 17:19:32
    #include <stdio.h> #include <stdlib.h> ... #define LIST_INIT_SIZE 10// 线性表存储空间的初始分配量 typedef int Status; //Status是函数数据类型 ,其值是函数结果状态,如OK ...
  • 顺序链表【初始化、赋值、打印、取值、查找、插入、删除、销毁、综合举例】
  • 顺序表的定义 (1) 顺序存储方法  即把线性表的结点按逻辑次序依次存放一组地址连续的存储单元里的方法。 (2) 顺序表(Sequential List)  用顺序存储方法存储的线性表简称为顺序表(Sequential List)。 代码...
  • 完成顺序表初始化、插入、删除、输出、查找等操作直接上代码,要注意理解何时用“&”,何时不用。代码里有详解。 #include <stdio.h> #define MaxSize 10 //定义最大长度 typedef struct { int data...
  • 顺序表的基本操作(完整代码

    千次阅读 2021-07-31 11:00:17
    L):初始化顺序表(动态分配) ListInsert(SqList& L, int i, int a):在顺序表中插入元素 bool ListDelete(SqList& L, int i) :在顺序表中按照位序删除元素 int LocateElem(SqList& L, int e):查找顺序表...
  • 剧中Sheldon可以说是一个极品,真不知Leonard是如何忍受这位极品室友成天的唠叨。 你知道么?Sheldon有一个神秘的小本本,记录了所有他从小开始讨厌的人名。Stuart这位漫画店老板就是小本本的一员哦,谁叫他常常...
  • 顺序表的表示和实现 顺序表的特点: 逻辑上相邻的元素物理上也是相邻 可以快速计算出任何一个数据元素的存储地址,即访问每个元素所花时间相等 算法实现(C语言) 这里插入代码片#include<stdio.h> #...
  • 文章目录(1)线性表(2)顺序表1)什么是顺序表2)顺序表的定义2)顺序表的接口实现1、初始化顺序表2、销毁(释放)顺序表3、检查顺序表容量是否满了,好进行增容3、顺序表尾插4、顺序表尾删5、顺序表头插6、顺序...
  • 初始化顺序表; 插入运算:将元素x插入到顺序表中第i个元素位置(元素位置是>=1的数); 查找运算:在顺序表中查找与值x匹配的元素,若查找成功,则返回元素在顺序表中的位置(该元素是顺序表中的第几个元素); 删除...
  • 文章目录顺序表的定义顺序表上的操作初始化求表长遍历表动态分配插入操作查找操作按值查找按位查找删除操作判空操作销毁操作完整代码及实例 顺序表的定义  线性表的顺序存储又称顺序表。它是用一组地址连续的存储...
  • //查找x是否L中,若有返回xL中的位序,若没有返回0; 删除函数delSeqList(SeqList *L,int i);//删除L中第i个元素,并返回其值。 本函数支持 printf("\n输入你要选择的命令\n"); printf.
  • 顺序表的基本操作

    2017-09-18 23:24:03
    本资源是:线性表中的顺序表的一些操作,包括初始化顺序表、建立顺序表、删除顺序表在顺序表中插入元素,在顺序表中删除元素、判断空的等一些基本操作。
  • 顺序表初始化、插入、删除

    千次阅读 多人点赞 2016-06-04 11:21:10
    顺序表初始化、插入、删除
  • 顺序表,全名顺序存储结构,是线性表的一种。通过《线性表》一节的学习我们知道,线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。 不仅如此,顺序表对数据的物理存储结构也有要求。顺序表存储数据...
  • 指针初始化顺序

    千次阅读 2019-04-07 18:30:05
    无继承时: 1、分配内存 2、初始化列表之前赋值虚指针...Q:虚指针在初始化列表之前被赋值,可以放在初始化列表之后赋值吗?即顺序是:列表初始化、虚指针赋值、构造函数体?? class B { public: virtual int...
  • c语言 顺序表的基本操作(创建、初始化、赋值、插入、删除、查询、替换、输出) 1、创建、申请空间 2、初始化顺序表数据结构大小、长度 3、赋值、顺序表数据结构赋值 4、插入、指定位置插入数据,后续数据...
  • 创建有若干个元素(可以是整型数值)的顺序表,实现对顺序表初始化,对已建立的顺序表插入操作、删除操作、遍历输出顺序表。 要求各个操作均以函数的形式实现,主函数中调用各个函数实现以下操作: ( 1...
  • 一、顺序表定义及特点 1.顺序表定义 2.顺序表特点 二、顺序表定义 三、顺序表插入运算 四、顺序表删除运算 五、顺序表元素查找 六、顺序表取元素数据 七、主函数定义 注1. typedef 解释 注2. 链表知识点...
  • 顺序表的实现

    2019-04-21 09:57:02
    代码顺序表的基本操作,包括顺序表初始化、长度、删除、插入、查找。
  • C++实现顺序表的创建、初始化、查找、插入、删除

    千次阅读 多人点赞 2020-05-24 23:14:52
    C++实现顺序表的创建、初始化、查找、插入、删除 学习了数据结构之后,对于顺序表的相关操作有了自己的启发,因此拿来敲个代码练练手,我选用的是C++语言,因为我觉得c++可以使用引用,比较方便(纯个人看法嘻嘻)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 359,631
精华内容 143,852
关键字:

在顺序表初始化代码