线性表
来源:互联网 发布:json unicode转中文 编辑:程序博客网 时间:2024/05/29 12:46
线性表描述相对简单, 参考百度百科.
线性表(亦作顺序表)是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。一般地,一个线性表可以表示成一个线性序列:k1,k2,…,kn,其中k1是开始结点,kn是终端结点。
是一个数据元素的有序(次序)集
线性表的基本操作:
内容的数据结构可以构造结构体
2. 操作函数声明
3. 自定义函数 :相对操作比较简单,主要是要注意线性表元素的数量问题.
===================================
C语言结构体说明参见: struct和typedef struct彻底明白了 && C语言结构体
结构体数组成员的赋值操作
strcpy(student.name,"sss");
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,否则返回false10)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
- 线性表--线性存储
- 线性表 线性结构
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 如何搜索到能解决自己的bug的方法
- 学习 Intel 线程构建块开源库(TBB)
- java 继承编程题
- QWidget的背景颜色和背景图片的设置
- UI028---UIScrollView控件实现图片轮播
- 线性表
- Android Bundle类
- 关于@property自动生成的实例变量的相关问题
- Qt之设置窗口背景
- python笔记 6
- 第2篇,到底什么是互联网思维?
- Qt之QTextEdit
- 结构体NSPoint、NSRect、与NSSize或CG开头的详解
- python中的split函数