线性表

来源:互联网 发布:json unicode转中文 编辑:程序博客网 时间:2024/05/29 12:46

    线性表描述相对简单, 参考百度百科.          

    线性表(亦作顺序表)是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。

                线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。一般地,一个线性表可以表示成一个线性序列:k1,k2,…,kn,其中k1是开始结点,kn是终端结点。
是一个数据元素的有序(次序)集

线性表的基本操作:
1)MakeEmpty(L) 这是一个将L变为空表的方法
2)Length(L) 返回表L的长度,即表中元素个数
3)Get(L,i) 这是一个函数,函数值为L中位置i处的元素(1≤i≤n)
4)Prior(L,i) 取i的前驱元素
5)Next(L,i) 取i的后继元素
6)Locate(L,x) 这是一个函数,函数值为元素x在L中的位置
7)Insert(L,i,x)在表L的位置i处插入元素x,将原占据位置i的元素及后面的元素都向后推一个位置
8)Delete(L,p) 从表L中删除位置p处的元素
9)IsEmpty(L) 如果表L为空表(长度为0)则返回true,否则返回false
10)Clear(L)清除所有元素
11)Init(L)同第一个,初始化线性表为空
12)Traverse(L)遍历输出所有元素
13)Find(L,x)查找并返回元素
14)Update(L,x)修改元素
15)Sort(L)对所有元素重新按给定的条件排序
16) strstr(string1,string2)用于字符数组的求string1中出现string2的首地址
c程序//

1. 结构
#define MaxSize  100  //定义线性表的最大长度typedef struct SeqListType{    DATA ListData[MaxSize];    int LisLen;}SeqListType;

内容的数据结构可以构造结构体
typedef struct{    char key[15];  //结点的关键字    char name[20];    int age;} DATA;    //定义结点类型,可定义为简单类型,也可定义为结构

2. 操作函数声明
void SeqListInit(SeqListType *SL); //初始化顺序表int SeqListLength(SeqListType *SL);  //返回顺序表的元素数量int SeqListAdd(SeqListType *SL,DATA data); //向顺序表中添加元素int SeqListInsert(SeqListType *SL,int n,DATA data); //向顺序表中插入元素int SeqListDelete(SeqListType *SL,int n);  //删除顺序表中的据元素DATA SeqListFindByNum(SeqListType *SL,int n);  //根据序号返回元素int SeqListFindByCont(SeqListType *SL, char* key); //按关键字查找int SeqListAll(SeqListType *SL);//遍历顺序表中的内容

3. 自定义函数 :相对操作比较简单,主要是要注意线性表元素的数量问题.
#include "SeqList.h"void SeqListInit(SeqListType *SL)  //初始化顺序表{    SL->LisLen = 0;}int SeqListLength(SeqListType *SL)   //返回顺序表的元素数量{    return SL->LisLen;}int SeqListAdd(SeqListType *SL,DATA data)  //向顺序表中添加元素{    if(SL->LisLen == MaxSize)    {        printf(" 链表已满, 无法插入 ");        return 0;    }    SL->ListData[SL->LisLen] = data;    SL->LisLen = SL->LisLen+1;}int SeqListInsert(SeqListType *SL,int n,DATA data)  //向顺序表中插入元素{    int i;    if( MaxSize <= SL->LisLen )    {       printf(" 链表已满, 无法插入");        return 0;    }    if ( n<1 || n > SL->LisLen)    {        return 0;    }    for(i= SL->LisLen-1; i>n-1; i-- )    {        SL->ListData[i+1] = SL->ListData[i];    }    SL->ListData[i] = data;    SL->LisLen = SL->LisLen + 1;    return 1;}int SeqListDelete(SeqListType *SL,int n)   //删除顺序表中的据元素{    int i;    if( 0 == SL->LisLen )    {       printf(" 链表为空");        return 0;    }    if( n<1 || n > SL->LisLen )    {        printf("删除结点序号错误,不能删除结点!\n");        return 0;              //返回0,表示删除不成功    }    for(i=n-1; i<SL->LisLen; i++)    {        SL->ListData[i] = SL->ListData[i+1];    }    SL->LisLen =SL->LisLen -1;    return 1;}DATA SeqListFindByNum(SeqListType *SL,int n)   //根据序号返回元素{    if( n<1 || n > SL->LisLen )    {        printf(" 结点序号错误 ");        //return 0;              //返回0,表示删除不成功    }    return SL->ListData[n-1];}int SeqListFindByCont(SeqListType *SL,char* key) //按关键字查找{    int i;    for (i=0; i<SL->LisLen; i++)        if( key == SL->ListData[i].key )            return i+1;    return 0;}int SeqListAll(SeqListType *SL)//遍历顺序表中的内容{    int i;    for (i=0; i<SL->LisLen; i++)    {       printf("%s",SL->ListData[i].name);    }    return 1;}int main(){    SeqListType List;    DATA student;    strcpy(student.name,"sss");    SeqListInit(&List);    SeqListAdd(&List,student);}

===================================
C语言结构体说明参见: struct和typedef struct彻底明白了 && C语言结构体    

结构体数组成员的赋值操作
    strcpy(student.name,"sss");


0 0
原创粉丝点击