当前位置:   article > 正文

线性表(c语言)_if(i<1||i>l->length+1)

if(i<1||i>l->length+1)

线性表是我们学习数据结构的第一个结构,也是最常用且最简单的一种数据结构。一个线性表就是n个数据元素的有限序列。每个数据元素的具体含义,在不同的情况下是各不相同的,它可以是一个数或一个符号,也可以是一本书,甚至其他更复杂的信息。

在稍复杂的线性表中,一个数据元素可以由瑞干戈数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称为文件。

线性表有以下特点:在数据元素的非空有限集中,(1)存在唯一的一个被称做“第一个”的数据元素;(2)存在唯一的一个被称做“最后一个”的数据元素;(3)除第一个之外,集合中每个数据元素均只有一个前驱;(4)除最后一个之外,集合中每个数据元素均只有一个后继。

线性表中元素的个数n(n>=0 )定义为线性表的长度,n=0时称为空表。在非空表中的每个数据元素都有一个确定的位置,如a1是第一个数据元素,an是最后一个数据元素,ai是第i个数据元素,称i为数据元素ai在线性表中的位序。

线性表是一个相当灵活的数据结构,它的长度可根据需要增长或缩短,即对线性表的数据元素不仅可以进行访问,还可进行插入和删除等。

线性表第一个需要学习的就是初始化一个空的线性表。在构造之前我们需要写出头文件,预定义和定义类型和结构体。

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

//定义函数的返回码

#define OK         1

#define FALSE      0

#define TRUE       1

#define ERROR      0

#define OVERFLOW  -2

#define LIST_INIT_SIZE   100

#define LISTINCREMENT    10

//定义类型和结构体

typedef int Status;//定义函数返回值类型

typedef int ElemType;//定义元素的类型

typedef struct

{

ElemType * elem;

int length;//线性表当前长度

int listsize;//线性表容量大小

}SqList;

//基本操作的实现

Status InitList_Sq(SqList &L)

{

//初始化一个空的线性表L

L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));

if (!L.elem) return OVERFLOW;

L.length = 0;

L.listsize = LIST_INIT_SIZE;

return OK;

}//InitList_Sq

还有一些线性表的基本操作:

1、输出

Status PrintList(SqList L)

{

//线性表输出函数

if (L.length == 0)

{

printf("当前线性表为空\n");

return OK;

}

printf("当前线性表的元素为:\n");

for (int i = 0; i < L.length; i++)

printf("%d ", L.elem[i]);

printf("\n");

return OK;

}//PrintList

2、在顺序线性表L的第i个位置之前插入新的元素

Status ListInsert_Sq(SqList &L, int i, ElemType e)

{

//在顺序线性表L的第i个位置之前插入新的元素

ElemType *p, *q, *newbase;

if (i<1 || i>L.length + 1) return ERROR;

if (L.length >= L.listsize)//线性表已满,需要追加空间

{

newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));

if (!newbase) return OVERFLOW;

L.elem = newbase;

L.listsize += LISTINCREMENT;

}

q = &L.elem[i - 1];

for (p = &L.elem[L.length - 1]; p > q; --p)

*(p + 1) = *p;

*q = e;

L.length += 1;

return OK;

}//ListInsert_Sq

3、

在顺序存储的线性表中删除第i个位置元素,并返回e的值

Status ListDelete_Sq(SqList &L, int i, ElemType &e)

{

//在顺序存储的线性表中删除第i个位置元素,并返回e的值

ElemType *p, *q;

if (i<1 || i>L.length) return ERROR;

q = &L.elem[i - 1];

e = *q;

p = L.elem + L.length - 1;

for (; p > q; q++)

*q = *(q + 1);

--L.length;

return OK;

}//ListDelete_Sq

以上就是线性表的部分内容,希望和大家共同学习,共同进步。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号