首页 > 学院 > 开发设计 > 正文

线性表

2019-11-06 09:18:10
字体:
来源:转载
供稿:网友

线性表、栈、队列、串和数组都属于线性结构。

线性表的的主要基本操作有插入、删除和查找等。

线性结构的基本特点是除第一个和最后一个元素外,每个数据元素只有一个前驱和一个后继。

线性表是最简单、最基本、最常用的一种数据结构,它有顺序存储和链式存储两种存储结构。

在一个线性表中,数据元素的类型是相同的,或者说线性表是由同一类型的数据元素构成的线性结构。

线性表的基本操作

(1)InitList(L),线性表初始化,构造一个空的线性表L。

(2)ListLength(L),求线性表的长度,返回线性表L中数据元素的个数。

(3)GetElem(L, i, x),用x返回线性表中的第i个元素的值。

(4)LocationElem(L, x),按值查找,确定数据元素x在表中的位置。

(5)ListInsert(L, i, x),插入操作,在线性表L中第i个位置之前插入一个新元素x,L的长度加1。

(6)ListDelete(L, i),删除操作,删除线性表L中的第i个元素,L的长度减1。

(7)ListEmpty(L),判断线性表L是否为空,空表返回true,非空表返回false。

(8)ClearList(L),将已知的线性表L置为空表。

(9)DestroyList(L),销毁线性表L。

顺序表

顺序表是计算机内存中以数组的形式保存的线性表;是指用一组地址连续的存储单元依次存数数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。

#include<stdio.h>#define MAXSIZE		1000	//线性表可能到达的最大长度#define TRUE		1		//操作成功#define ERROR		0		//操作错误#define	OVERFLOW	2		//顺序表已存满	#define FALSE		-1		//操作失败	 typedef int ElemType;typedef struct{	ElemType elem[MAXSIZE];	int length;}SeqList; //定义一个顺序表SeqList L; //1.顺序表的初始化void init_SeqList(SeqList *L){	L->length = 0;} //2.顺序表的插入//操作步骤://(1)将an ~ ai 按从后向前的顺序向下移动,为新元素让出位置。//(2)将x置入空出的第i个位置。//(3)修改表长int insert_SeqList(SeqList *L, int i, ElemType x){	int j;	if(L->length == MAXSIZE){		//表空间已满,不能插入。 		PRintf("顺序表已存满/n");		return OVERFLOW; 		}	if(i < 0 || i > L->length + 1){	//检查插入位置的正确性。 		printf("插入位置错误/n");		return ERROR;	}	for(j = L->length-1; j >= i; j--){		L->elem[j+1] = L->elem[j];	}	L->elem[i] = x;	L->length++;	return TRUE;					//插入成功,返回 } //3.顺序表的删除//操作步骤//(1)将ai+1 ~ an依次向上移动;//(2)将Length值减1。 int delete_SeqList(SeqList *L, int i) {	//删除表中第i个元素,若表空或不存在指定元素,则返回ERROR 	int j;	 if(i < 0 || i > L->length-1) {			//检查空表及删除位置的合法性。 	 	printf("不存在第i个元素");		 return ERROR;	 }	 for(j = i; j < L->length - 1; j++){	 	L->elem[j] = L->elem[j+1];			//向上移动 	 } 	 L->length--;	 return TRUE; 	  }  //4.顺序表中按值查找 //从第一个元素a0起依次和x比较,直到找到一个与x相等的数据元素, //返回它在顺序表中的序号,若查遍整个线性表都没有找到与x相等的元素,返回FALSE int location_SeqList(SeqList *L, ElemType x){ 	int i = 0; 	while(i < L->length && L->elem[i]  != x){ 		i++;	 }	 if(i >= L->length){	 	return FALSE;		//查找失败 	 } else{	 	return i;			//返回x的存储位置 	 } } //------------------------------------------- void print_SeqList(SeqList *L){	for(int i = 0; i < L->length; i++){		printf("%d ", L->elem[i]);	}	printf("/n");}int main(void){	init_SeqList(&L);	insert_SeqList(&L, 0, 2);	insert_SeqList(&L, 1, 3);	insert_SeqList(&L, 0, 4);	print_SeqList(&L);//	delete_SeqList(&L,0);	print_SeqList(&L);	int i= location_SeqList(&L, 35);	printf("%d/n",i);	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表