2、数据结构(C语言)顺序表实现

一、顺序表的简介

定义:把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元中

顺序表也成为向量

  • 向量:V  
  • 向量V的第i个分量:V(i)
  • 含有n个数据元素:V[n]

顺序表是一种随机存储结构

元素存储地址的计算方法:

LOC(ai)=LOC(a1)+(i-1)*d  ,d为每个数据元素占用的存储单元


二、顺序表的描述和基本功能的实现

#include "stdafx.h"

//顺序表描述
#define ListSize 100 //容量100
typedef int DataType;//规定DataType为int
typedef struct
{
	DataType data[ListSize];//数组data存放表结点
	int length;//当前表的长度
}SeqList;

//顺序表的初始化
void InitList(SeqList *L)
{
	//将当前表的长度设为0
	L->length=0;
}

//获取当前表的长度
int LengthList(SeqList *L)
{
	//返回顺序表的表长
	return L->length;
}

//取表元
DataType GetList(SeqList *L,int i)
{
	//放回顺序表的第i个结点的值:L->data[i-1]
	return L->data[i-1];
}

//插入结点
int InsertList(SeqList *L,DataType t,int i)//L:要插入的表,t:插入的数值,i:插入的位置
{
	//将结点t插入到顺序表L的第i个结点的位置上
	int j;
	//判断插入的位置
	if(i<1||i>L->length+1)
	{
		puts("插入位置错误");
		return 0;
	}
	//判断表是否满容量
	if(L->length>=ListSize)
	{
		puts("表满不能插入");
		return 0;
	}
	//满足上面的条件后便可进行插入
	for(j=L->length-1;j>=i-1;j--)
	{
		L->data[j+1]=L->data[j];//结点一次后移,留出一个插入的位置
	}
	L->data[i-1]=t;//插入结点
	L->length++;//表长+1
	return 1;
}

//删除结点
int DeleteList(SeqList *L,int i)
{
	//从顺序表L中删除第i个结点
	int j;
	if(i<1||i>L->length)
	{
		puts("删除位置错误");
		return 0;
	}
	if(L->length==0)
	{
		puts("空表不能删除");
		return 0;
	}
	for(j=i;j<=L->length-1;j++)
	{
		L->data[j-1]=L->data[j];//从前往后向前移动一位
	}
	L->data[L->length-1]=0;//将原先的最后一个数清零
	L->length--;//表长-1
	return 1;
}

//按数值查找
int LocateList(SeqList *L,DataType t)
{
	//丛顺序表L中查找数值为t的结点,找到返回位置i,否则返回-1
	int i=1;
	while(i<L->length&&L->data[i-1]!=t)
		i++;
	if(L->data[i-1]==t)
		return i;
	else 
		return -1;
}

int _tmain(int argc, _TCHAR* argv[])
{
	SeqList T={{12,35,5,25,17,49},{6}};	
	LengthList(&T);
	GetList(&T,2);
	InsertList(&T,999,2);
	DeleteList(&T,2);
	LocateList(&T,17);

	return 0;
}

经调试,所得的结果正确。

猜你喜欢

转载自blog.csdn.net/qq_36109528/article/details/80267885