顺序表的基本操作(详细、全面)

数据结构 专栏收录该内容
1 篇文章 0 订阅

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

接下来看一下顺序表的基本操作:

1.顺序表结构体定义:

#define ELEM_SIZE 100   //顺序表中元素的个数
typedef int ELEMTYPE;
typedef struct Seqlist
{
	ELEMTYPE data[ELEM_SIZE];
	ELEMTYPE last;       //顺序表的长度

}SeqList,*PSeqlist;

2.顺序表所要实现的功能:

void Init_List(PSeqlist pl);//对顺序表进行初始化操作
int InsertList(PSeqlist pl,int pos,ELEMTYPE val);//插入
int DeleteList(PSeqlist pl,int pos);//按位置删除
int deleteList(PSeqlist pl,int val);//按值删除
void clear(PSeqlist pl);//清空
bool IsFull(PSeqlist pl);//判满
bool IsEmpty(PSeqlist pl);//判空
void Show(PSeqlist pl);//打印

3.具体的代码实现如下:

#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define MAXSIZE 2000
#include"SequenList.h"

void Init_List(PSeqlist pl)//进行对顺序表进行初始化
{
	assert(pl!=NULL);
	pl->last=0;//使顺序表开始的时候长度为0;
}
//按位置进行对其顺序表中插入元素
int InsertList(PSeqlist pl,int pos,int val)
{
	assert(pl != NULL);
	if(pos<0 || pos>MAXSIZE || IsFull(pl))//先判断插入的位置是否合法和顺序表是否已经满了;
	{
		return -1;
	}
		for(int i=pl->last;i>=pos;i--)//找到插入的那个位置
	{
	    pl->data[i+1]=pl->data[i];//将后面的每个数据向后移一位;
	}
	pl->data[pos]=val;
	pl->last=pl->last+1;//最后将顺序表的长度加1;
	return 1;
}

按位置进行删除
int DeleteList(PSeqlist pl,int pos)
{
	assert(pl != NULL);
	if(pos<1 || pos>pl->last || IsEmpty(pl))//判断删除的位置是否合理和顺序表是否为空
	{
		return -1;
	}
	else
	{
		for(int i=pos;i<pl->last;i++)
		{
			pl->data[i-1]=pl->data[i];//将后面的每个数据向前移一位;
		}
	}
	pl->last-=1;
	return 1;
}
按值删除
int deleteList(PSeqlist pl,int val)
{
	assert(pl != NULL);
	for(int i=pl->last-1;i>=0;i--)
	{
		if(pl->data[i] == val)//找到删除的值的位置
		{
			for(int j=i;j<pl->last-1;j++)//
			{
				pl->data[j]=pl->data[j+1];//将后面的每个数据向前移一位;
			}
			pl->last-=1;
		}
		
	}
	
	return 1;
}
void clear(PSeqlist pl)//清空顺序表操作
{
	pl->last=0;
}
bool IsFull(PSeqlist pl)//对顺序表进行判满操作
{
	return pl->last == MAXSIZE;
}
bool IsEmpty(PSeqlist pl)//对顺序表进行判空操作
{
	return pl->last == 0;
}
void Show(PSeqlist pl)//打印顺序表中的内容
{
	for(int j=0;j<pl->last;j++)
	{
		printf("%d  ",pl->data[j]);
	}
	printf("\n");
}

5.主函数:

int main()
{
    Seqlist sl;
    Init_List(&sl);
    IsFull(&sl);
    InsertList(&sl,0,10);
    InsertList(&sl,1,20);
    InsertList(&sl,2,30);
    InsertList(&sl,3,20);
    InsertList(&sl,4,20);
    InsertList(&sl,5,50);
    InsertList(&sl,6,10);
    /*for(int i=0;i<10;i++)
    {
        InsertList(&sl,i,i+10);
    }*/
    Show(&sl);
    DeleteList(&sl,2);
    deleteList(&sl,20);
    Show(&sl);
    clear(&sl);
    Show(&sl);
    return 0;
}

总结:

      原理:顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度

     优点:存取速度高效,通过下标来直接存储

     缺点:1.插入和删除比较慢,2.不可以增长长度    

     比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值