数据结构——顺序表(定义详解及建立顺序表与实现其操作)

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

简单来说,顺序表存储有两个特点:
1.逻辑顺序和物理顺序一致。
2.数据元素之间的关系通过物理相邻来实现。

顺序表示意图如下:
在这里插入图片描述
代码实现(c语言):

1.定义线性表的顺序存储结构

#define MAXSIZE 100          //设置顺序表的最大容量为100

typedef int cont;            //这里将cont定义为int类型,为什么要多此一步,因为如果将int类型改为floct类型,只需要将这里的int换为float即可,省去很多修改步骤
typedef struct{
    
    
	cont data[MAXSIZE];
	int length;
}OList;                      //定义一个OList结构体,内含有一个最大容量为MAXSIZE的数组,和顺序表长度,此时OList就是定义一个顺序表

2.顺序表的创建

Olist *SetList()
{
    
    
	OList *L;
	L = (OList*)malloc(sizeof(OList));      //为L指针分配内存空间
	L->length=0;                            //空表长度为0
	return L;
 } 

3.顺序表的插入

OList InsertList(OList *L,int i,cont x)     //L为指向顺序表的指针,i是第几位插入,x是要插入的数据// 
{
    
    
	if(i<1||i>(L->length)+1)
	printf("插入位置有误");
	else if(L->length==MAXSIZE)
	printf("表空间已满,不能再进行插入");
	else
	{
    
    
	for(int j=i-1;j<L->length;j++)
		L->data[j+1]=L->data[j];
	L->data[i-1]=x;	
	}
	L->length++;
	return *L;
 } 

4.顺序表的删除

OList DeList(OList *L,int i)                    //i为第几位数据元素
{
    
    
	if(i<1||i>(L->length))
	printf("删除位置有误");
	else
	{
    
    
	for(int j=i-1;j<L->length;j++)
		L->data[j]=L->data[j+1];	
	}
	L->length--;
	return *L;
 }

5.顺序表的修改

 OList AmendList(OList *L,int i,cont y)         //i为第几位,y为修改后的数据元素
 {
    
    
 	if(i<1||i>(L->length))
	printf("改动位置有误");
	else
	L->data[i-1]=y; 
	return *L;
  } 

6.顺序表的查找

int FindList(OList *L,cont z)
//z为查找的数据元素
 {
    
    
 	for(int i=0;i<L->length-1;i++)
 	{
    
    
 		if(L->data[i]==z)
 		return i+1;  
	 }
	return 0;
  } 

7.判断顺序表是否为空

int EmptyList(OList L)
{
    
    
    if (L->length == 0)
    {
    
    
        return 1;
    }
    return 0;
}

8.打印顺序表中元素

void PrintList(OList L)
{
    
    
    if (EmptyList(L))
    {
    
    
        printf("表为空!\n");
    }
    for (i = 0; i < L->length; i++)
    {
    
    
        printf("%-3d", L->data[i]);
    }
    printf("\n");
}

以上就是顺序表创建及实现其操作的c语言代码,完整的代码及试验其功能操作如下:

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
int a,b,c,d;

typedef int cont;
typedef struct{
    
    
	cont data[MAXSIZE];
	int length;
}OList;

//顺序表的初始化//
OList *SetList()
{
    
    
	OList *L;
	L = (OList*)malloc(sizeof(OList));
	L->length=0;
	return L;
 } 
 
//顺序表的插入//
OList InsertList(OList *L,int i,cont x)
{
    
    
	if(i<1||i>(L->length)+1)
	printf("插入位置有误");
	else if(L->length==MAXSIZE)
	printf("表空间已满,不能再进行插入");
	else
	{
    
    
	for(int j=i-1;j<L->length;j++)
		L->data[j+1]=L->data[j];
	L->data[i-1]=x;	
	}
	L->length++;
	return *L;
 } 

//顺序表的删除//
OList DeList(OList *L,int i)
{
    
    
	if(i<1||i>(L->length))
	printf("删除位置有误");
	else
	{
    
    
	for(int j=i-1;j<L->length;j++)
		L->data[j]=L->data[j+1];	
	}
	L->length--;
	return *L;
 }
 
 //顺序表的改动//
 OList AmendList(OList *L,int i,cont y)
 {
    
    
 	if(i<1||i>(L->length))
	printf("改动位置有误");
	else
	L->data[i-1]=y; 
	return *L;
  } 

//顺序表的查找//
int FindList(OList *L,cont z)
 {
    
    
 	for(int i=0;i<L->length-1;i++)
 	{
    
    
 		if(L->data[i]==z)
 		return i+1;  
	 }
	return 0;
  } 

//判断顺序表是否为空 
int EmptyList(OList *L)
{
    
    
    if (L->length == 0)
    {
    
    
        return 1;
    }
    return 0;
}

//打印顺序表中元素 
void PrintList(OList *L)
{
    
    
    if (EmptyList(L))
    {
    
    
        printf("表为空!\n");
    }
    for (int i = 0; i < L->length; i++)
    {
    
    
        printf("%-3d", L->data[i]);
    }
    printf("\n");
}
 
int main()
{
    
    
	OList *L;
	L=SetList();
    printf("请输入四个数据作为顺序表数据元素:\n");
    scanf("%d%d%d%d",&a,&b,&c,&d);
    InsertList(L,1,a);
	InsertList(L,2,b);
	InsertList(L,3,c);
	InsertList(L,4,d);
	PrintList(L);                 //输出顺序表现有的数据元素               
	AmendList(L,1,10);
	PrintList(L);                //打印顺序表元素,查看第一个是否被修改 
	DeList(L,1);                                             
	PrintList(L);                //打印顺序表元素,查看第一个是否被删除

}

运行结果:
在这里插入图片描述

这里为了使各功能实现更加简单易懂,最后的试验部分十分繁琐,各位看这部分只需要明白功能是如何实现即可。

猜你喜欢

转载自blog.csdn.net/Three__Curry/article/details/113190985
今日推荐