数据结构-顺序表 顺序表的操作详解

本文详细介绍了顺序表的数据结构,包括初始化、获取元素、查找元素、插入元素、删除元素及销毁等操作。顺序表是一种逻辑上相邻的元素在物理存储上也相邻的数据结构,具有简单直观的特点。代码示例使用C语言实现,并提供了相应的宏定义和头文件。
摘要由CSDN通过智能技术生成

目录

顺序表(Sequence List)

Status函数

 顺序表的存储结构: 

 初始化:

 获取元素:

 查找元素

 插入元素:

 删除元素:

销毁、清空、检查为空

顺序表头文件: 


本笔记用到的宏定义,头文件为define.h

#ifndef __DEFINE_H 
#define __DEFINE_H 
#define TRUE 1 
#define FALSE 0 
#define OK 1 
#define ERROR 0 
#define INFEASIBLE -1 
#define OVERFLOW -2 
typedef int Status; 
#endif

顺序表(Sequence List)

特点:逻辑上相邻的元素,在物理次序上也是相邻的。

Status函数

Status为函数类型(当return值为函数结果状态时用)
它并不是C语言中原带的关键字,而是自己定义的
如,typedef int Status; 或 typedef char Status; 等

typedef int Status;
Status range(int n)
{
 if(n>=30&&n<=100)
  return 0;
 else
  return -1;
}

 顺序表的存储结构: 

#define SQLMAXSIZE 100
typedef int SqlElemType;
typedef struct __SqList{
	SqlElemType *base;
	int length;
}Sqlist;

初始化:

Status InitSL(Sqlist *L,int length){
L->base=(SqlElemType *)malloc(sizeof(SqlElemType) * SQLMAXSIZE);
if(!L->base)
 return OVERFLOW;
L->length=0;
for(int i=1;i<=length;i++)
{
	SQlElemtype e;
	scanf("%d",&e);
	SQlInsert(L,i,e);
}
return OK;
}

获取元素:

Status GetElem(Sqlist *L,int position,SqlElemType *e)
{
	if(position<1||position>L->length)
	 return ERROR;
	*e=L->base[position-1];
	return OK;
}

查找元素

int LocateElem(Sqlist *L,SqlElemType e)
{
	for(int i=0;i<L->length;i++)
	{
		if(e==L->base[i])
		return i+1;
	}
	return 0;//0代表查找元素不在顺序表中 
 } 

 插入元素:

Status SqlInsert(SQlist *L,int position,SqlElemType e)
{
	if(position<1||position>L->length+1)
	return ERROR;
	if(L->length==SQLMAXSIZE)
	return OVERFLOW;
	for(int i=L->length-1;i>=position-1;i--){
		L->base[i+1]=L->base[i]; 
	} 
	L->base[position-1]=e;
	L->length++;
	return OK;
}

删除元素:

Status SqlDelete(Sqlist *L,int position,SqlElemType *e)
{
	if(position<1||position>L->length)
	return ERROR;
	for(int i=position;i<L->length;i++)
	{
		L->base[i-1]=L->base[i];
	}
	*e=L->base[position-1];
	L->length--;
	return OK;
}

销毁、清空、检查为空

销毁:

Status SqlDestroy(Sqlist *L)
{
	if(!L->base)
	return ERROR;
	else{
		free(L->base);
		return OK;
	} 
}

清空:

void SqlClear(Sqlist *L) { L->length = 0; }

判断是否为空:

Status SqlIsEmpty(Sqlist *L)
{
    if(0==L->length)
    return TRUE;
    else
    return FALSE;
}

顺序表头文件: 

#include "define.h" 
#include <stdio.h> 
#include <stdlib.h>
#ifndef __SEQUENCELIST_H
#define __SEQUENCELIST_H 
#define SQLMAXSIZE 100 
typedef int SqlElemType; 
typedef struct __Sqlist { SqlElemType *base; int length; } 
Sqlist; Status InitSL(Sqlist *L, int length); 
Status GetElem(Sqlist *L, int position, SqlElemType *e); 
int LocateElem(Sqlist *L, SqlElemType e); 
Status SqlInsert(Sqlist *L, int position, SqlElemType e); 
Status SqlDelete(Sqlist *L, int position, SqlElemType *e); 
Status SqlDestroy(Sqlist *L); 
void SqlClear(Sqlist *L); 
Status SqlIsEmpty(Sqlist *L); 
void MergeList(Sqlist *La, Sqlist *Lb); 
void Traverse(Sqlist *L); 
void MergeList_Seq(Sqlist *La, Sqlist *Lb, Sqlist *Lc);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值