`
ccjsjymg
  • 浏览: 61958 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据结构线性表顺序存储操作

阅读更多
头文件:
//****************************************
//* 文件:Sequence.h
//* 描述:线性表顺序存储操作
//* 创建人:草根帮主
//* 创建日期:2009-6-6
//* 修改日期:2010-6-6
//****************************************
#ifndef _SEQUENCE_H_
#define _SEQUENCE_H_

#include <stdio.h>
#include <stdlib.h>

#define INIT_ALLOCATION     100		//存储空间初始化大小
#define DATA_INCREMENT       10		//存储空间分配增量


typedef unsigned int DATATYPE;

enum STATUS_LIST
{
	SEQLIST_ERROR = -1,      //分配空间错误
	SEQLIST_SUCCESS = 1       //分配空间成功
};

typedef struct SEQUENCELIST
{
	DATATYPE* element;			//数据元素
	unsigned int nLength;		//当前顺序表长度
	unsigned int listSize;		//初始化分配大小
}*SeqList;

//构造一个空的线性表顺序存储结构
STATUS_LIST Init_SeqList(SeqList seqList);
//返回线性表当前长度
unsigned int GetSeqLength(SeqList seqList);
//查找元素
bool FindElement(SeqList seqList, unsigned int i, DATATYPE* findElement);
//插入元素
bool InsertSeqList(SeqList seqList, unsigned int i, DATATYPE addElement);
//删除元素
bool DelSeqList(SeqList seqList, unsigned int i, DATATYPE* delEle);
//打印所有元素
void PrintSeqList(SeqList seqList);
#endif


cpp文件:
#include "Sequence.h"

//**********************************************
//* 函数:Init_SeqList
//* 功能:构造一个空的线性表顺序存储结构
//* 参数:
//*	     seqList:线性表顺序存储结构
//* 返回值:
//* 创建人:草根帮主
//* 创建时间:
//* 备注:
//**********************************************
STATUS_LIST Init_SeqList(SeqList seqList)
{
	seqList->element = (DATATYPE*)malloc(INIT_ALLOCATION*sizeof(DATATYPE));
	if ( !seqList->element )
		return SEQLIST_ERROR;

	seqList->listSize = INIT_ALLOCATION;
	seqList->nLength = 0;

	return SEQLIST_SUCCESS;
}

//**********************************************
//* 函数:GetSeqLength
//* 功能:返回线性表当前长度
//* 参数:
//*	     seqList:线性表顺序存储结构
//* 返回值:
//* 创建人:草根帮主
//* 创建时间:
//* 备注:
//**********************************************
unsigned int GetSeqLength(SeqList seqList)
{
	return seqList->nLength;
}

//**********************************************
//* 函数:GetElement
//* 功能:查找元素
//* 参数:0
//*	     seqList:线性表顺序存储结构,i:查找元素的位置,findElement:查找到的元素
//* 返回值:
//* 创建人:草根帮主
//* 创建时间:
//* 备注:
//**********************************************
bool FindElement(SeqList seqList, unsigned int i, DATATYPE* findElement)
{
	if ( i < 1 || i > seqList->nLength+1 ) return false;

	*findElement = *(seqList->element+i-1);

	return true;
}

//**********************************************
//* 函数:InsertSeqList
//* 功能:插入元素
//* 参数:0
//*	     seqList:线性表顺序存储结构,i:插入元素的位置,addElement:添加的元素
//* 返回值:
//* 创建人:草根帮主
//* 创建时间:
//* 备注:
//**********************************************
bool InsertSeqList(SeqList seqList, unsigned int i, DATATYPE addElement)
{
	if ( i < 1 || i > seqList->nLength + 1 ) return false;

	//考虑元素添加过程中,初始化分配空间不足,需要重新分配空间
	if ( seqList->nLength >= seqList->listSize )
	{
		seqList->element = (DATATYPE*)realloc(seqList->element, (seqList->listSize+DATA_INCREMENT)*sizeof(DATATYPE));
		seqList->listSize += DATA_INCREMENT;
	}

	//最后一个元素
	DATATYPE* q = seqList->element + (seqList->nLength-1);
	for(;q >= seqList->element+i-1;--q)
	{
		*(q+1) = *q;
	}

	*(seqList->element+i-1) = addElement;
	++seqList->nLength;

	return true;
}

//**********************************************
//* 函数:DelSeqList
//* 功能:删除元素
//* 参数:
//*	     seqList:线性表顺序存储结构,i:删除元素的位置,delEle:删除元素
//* 返回值:
//* 创建人:草根帮主
//* 创建时间:
//* 备注:
//**********************************************
bool DelSeqList(SeqList seqList, unsigned int i, DATATYPE* delEle)
{
	if ( i < 1 || i >= seqList->nLength + 1 ) return false;

	DATATYPE* q = seqList->element+i-1;
	*delEle = *q;
	
	for(++q; q <= (seqList->element+seqList->nLength-1);++q)
	{
		*(q-1) = *q;
	}

	--seqList->nLength;
	return true;
}

//**********************************************
//* 函数:PrintSeqList
//* 功能:打印所有元素
//* 参数:
//*	     seqList:线性表顺序存储结构
//* 返回值:
//* 创建人:草根帮主
//* 创建时间:
//* 备注:
//**********************************************
void PrintSeqList(SeqList seqList)
{
	if ( !seqList ) return;
	
	unsigned int i = 0;
	printf("存储元素列表:\n");
	while(i < seqList->nLength)
	{
		printf("%d\n", *(seqList->element+i++));
	}
}

//入口函数
int main(void)
{
	struct SEQUENCELIST seq;
	Init_SeqList(&seq);

	DATATYPE addElement = 1;
	InsertSeqList(&seq, 1, addElement);
	addElement = 2;
	InsertSeqList(&seq, 2, addElement);

	addElement = 3;
	InsertSeqList(&seq, 3, addElement);
	PrintSeqList(&seq);
	/*
	if ( FindElement(&seq, 1, &addElement) )
	{
		printf("查找元素:%d\n", addElement);
	}
	
	if ( DelSeqList(&seq, 1, &addElement) )
	{
		printf("删除元素:%d\n", addElement);
	}

	PrintSeqList(&seq);
	*/
	return 0;
}
0
2
分享到:
评论

相关推荐

    数据结构线性表的顺序存储结构

    实验 二 基于链式存储结构 实现线性表的基本的 常见的运算 提示: ⑴ 提供一个实现功能的演示系统 ⑵ 具体物理结构和数据元素类型自行选定 ⑶ 线性表数据可以使用磁盘文件永久保存

    数据结构——线性表顺序存储结构(C++代码)

    线性表是数据结构中最基础且重要的概念之一,它是由n(n≥0)个相同类型元素构成的有限序列。顺序存储结构则是线性表的一种常见实现方式,它将...通过实际操作,可以加深对线性表顺序存储结构的理解,并提升编程技能。

    线性表顺序存储结构实现通讯录

    C++数据结构 线性表顺序存储结构实现通讯录

    数据结构 线性表 顺序表基本操作

    线性表的顺序表的建立、插入、删除、输出等操作。

    数据结构之线性表的顺序表示和实现

    以上就是关于“数据结构之线性表的顺序表示和实现”的主要知识点,以及可能的代码实现结构。通过这三个文件,我们可以学习如何在C++中实现一个基本的顺序表,并对其进行操作。这不仅有助于理解数据结构的基础,也为...

    数据结构线性表的顺序和链式实现

    在"线性表顺序存储.CPP"文件中,我们可以看到C语言实现的顺序表,包括添加、删除、查找等基本操作的代码。 链式表则是动态的数据结构,它的每个元素(节点)包含两部分:数据域和指针域,指针域指向下一个元素的...

    数据结构实验指导书,线性表顺序存储结构的操作

    数据结构实验指导书,线性表顺序存储结构的操作 本资源提供了一个关于线性表顺序存储结构的操作实验指导书,涵盖了线性表的基本运算、顺序存储结构的实现、主程序设计等内容。实验的目的是掌握用 VC++ 调试程序的...

    数据结构实验报告-线性表顺序存储结构的操作及其应用

    本次实验的核心在于深入理解并实践**线性表顺序存储结构**。线性表是数据结构中最基础的数据组织形式之一,它由一系列相同类型的数据元素组成,这些元素按照逻辑关系形成线性的序列。顺序存储结构则是通过连续的内存...

    数据结构——vc6对话框编程,线性表顺序存储操作

    4. **四_线性表顺序存储**: 这个文件名可能指的是一个示例项目或源代码文件,包含了实现上述操作的具体代码。这个文件可能会定义一个线性表类,包含追加、插入和删除方法,以及可能的辅助函数,如显示当前线性表...

    c语言数据结构线性表实验(包括顺序表和链表)

    在这个"C语言数据结构线性表实验"中,我们将深入探讨两种实现线性表的方法:顺序表和链表。 1. **顺序表**: - **定义**:顺序表是将数据元素存储在一块连续的内存区域中,每个元素都有一个固定的索引位置。 - **...

    数据结构实验一线性表的基本操作.docx

    数据结构实验一线性表的基本操作 一、线性表的概念和类型 线性表是一种基本的数据结构,它是一种由零个或多个元素组成的有限序列,每个元素都是数据类型的实例。线性表可以分为两种类型:顺序存储结构和链式存储...

    线性表顺序存储运算的算法实现

    线性表是一种基础且...总结,线性表的顺序存储在C语言中的实现涉及数据结构的基本操作,这些操作的理解和实践对于掌握数据结构和算法至关重要。通过熟练运用这些知识,可以为更复杂的算法和数据结构打下坚实的基础。

    关于线性表的顺序存储和链式存储结构的实验报告

    在数据结构实验报告中,线性表的存储结构被分为两大类:顺序存储结构和链式存储结构。 顺序存储结构(Sequential Storage Structure)是将线性表中的元素按顺序存储在一个连续的内存空间中。线性表的顺序存储结构...

    数据结构实验报告1线性表的顺序存储结构.doc

    实验报告的主题是“数据结构实验报告1:线性表的顺序存储结构”,旨在通过实践让学生掌握线性表在顺序存储结构中的基本操作,包括创建、插入和删除等。实验使用了Visual C++作为开发环境,并涉及到了C++编程语言。 ...

    数据结构线性表的顺序存储实验源代码

    在这个实验中,我们关注的是如何在C语言环境下,使用Visual C++6.0进行线性表的顺序存储操作,包括插入、删除、查找以及有序顺序表的合并。 首先,实验的目标是掌握顺序表的基本操作。在顺序表中插入一个元素,需要...

    实验一 顺序结构线性表基本操作的实现

    实验一 顺序结构线性表基本操作的实现 线性表基本操作的实现 线性表的顺序存储有何优缺点?

    数据结构 线性表 代码

    线性表是数据结构中的基本概念,它是一种有序的数据集合,其中每个元素都有一个前驱和后继(除了首元素和尾元素)。线性表的实现方式主要有两种:顺序表和链表。 首先,我们来看顺序表。顺序表是将数据元素存放在一...

    线性表顺序存储的实现

    总结起来,线性表顺序存储的实现是数据结构和算法学习的重要部分,它涉及到数组操作、动态内存管理、基本的查找和排序算法等核心知识。通过实际编程和测试,我们可以更好地理解和掌握这些概念,这对于任何IT专业人士...

    数据结构线性表顺序存储方式的实现

    数据结构和算法是程序设计的灵魂。其中线性表的顺序存储结构是最简单最常用的数据结构:用一段连续地址依次存储表中的数据元素。

    dm02_线性表顺序存储设计与实现.zip_数据结构 线性表

    总的来说,这个压缩包中的代码提供了线性表顺序存储的一个基础实现,是学习和理解数据结构及算法的好例子。通过阅读和分析这段代码,你可以深入理解线性表的概念,以及如何用C语言高效地实现其基本操作。

Global site tag (gtag.js) - Google Analytics