栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

顺序表(顺序存储结构)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

顺序表(顺序存储结构)

顺序存储结构会申请一段连续的内存空间来存储数据,下面详解一下顺序表的各大使用

在此之前必须要了解一个知识点:当传参的时候,如果你需要改变这个参数的数值,则需要传递这个参数变量的地址,当你不需要改变它的数值的时候,只需要传递该参数就行,这个对于非常学习数据结构十分重要。

相关的头文件定义:

#include "stdio.h"    

#include "stdlib.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 20          

首先顺序表的定义,仅仅只需要该表的长度和分配数组大小,这个类似于结构体

typedef int ElemType;      
typedef struct
{
	ElemType data[MAXSIZE];
	int length; 
}SqList;
typedef int Status;      //定义函数的类型 

顺序表的初始化(将长度赋值为0)

Status InitList(SqList *L) 
{ 
    L->length=0;
    return OK;
}

插入数据:插入的位置可以在头,身,尾三个地方,所以要进行判断,当插入到尾部的时候,直接将该数值赋值给data[i-1]便可以,但如果是身或者头,则需要将该插入元素的后面元素依次往后移一位,最后记得将表长+1;

Status ListInsert(SqList *L,int i,ElemType e)   //i---插入的位置    e----插入的元素 
{ 
	int k;
	if(L->length == MAXSIZE)
	return ERROR;
	if(i<1||i>L->length+1)
	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表里面的数据(改变了表的数据,则需要传递表的地址)

Status deleteList(SqList *L,int s,ElemType *e)     //s---位置 
{
	int i;
	if(s>L->length||s<1)
	return 0;
	*e = L->data[s-1];    //记录删除的元素 
	if(slength)
	{
		for(i = s;ilength;i++)
		{
			L->data[i-1] = L->data[i];		
		}
	}
	L->length--;
	return OK;
} 

当你要删除表尾元素的时候,不需要进行驯悍操作,因为,当表长减1的时候,这个最后一位元素自然会消失,完全不用理会这种情况,只需要考虑当该位置位于表头或者表身的时候的删除情况。

查找元素位置(思路:for循环+判相等)

int findList(SqList L,ElemType e)
{
	int i;
	if(L.length == 0)
	return 0;
	for(i = 0;i 

判断表是否为空

Status Listempty(SqList L)
{
	if(L.length == 0)
		return TRUE; 
	else
		return FALSE;
}

求表长

int ListLength(SqList L)
{
	int i = 0;
	while(L.length)
	{
		++i;
		L.length--;
	}
	return i;
}

合并顺序表

void unionL(SqList *La,SqList Lb)
{
	int La_len,Lb_len,i;
	ElemType e;                        
	La_len=ListLength(*La);            
	Lb_len=ListLength(Lb);
	for (i=1;i<=Lb_len;i++)
	{
		getElem(Lb,i,&e);              
		if (!LocateElem(*La,e))        
			ListInsert(La,++La_len,e); 
	}
}
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;
}
int LocateElem(SqList L,ElemType e)
{
    int i;
    if (L.length==0)
            return 0;
    for(i=0;i=L.length)
            return 0;

    return i+1;
}

代码运行结构如下:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号