数据结构之简单线性表
来源:互联网 发布:免费英语水平测试软件 编辑:程序博客网 时间:2024/05/02 04:46
线性表是一种基本的数据结构。
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。这里我们只讨论顺序存储的线性表。在内存中一连续的一段空间来存储。线性表可以实现在n个连续的空间(即线性
表长度为n)插入,删除,查找,清空等操作。详细用法如下:
1.线性表的定义以及初始化
struct node//定义一个结构体{ int *elem; int len; //存线性表长度};
void InitList(struct node *l)//初始化线性表{ l->elem=(int *)malloc(sizeof(int)*length);//给结构体里的指针elem开length个interesting型的空间 l->len=0;}
2.插入函数
void ListInsert(struct node *l,int id,int e)//在指定位置插入某值{ if(l->len>length)//线性表长度超过length,报错 return Error; else { if(id>l->len)//插入位置大于当前线性表长度,插入线性表末尾 { l->elem[l->len++]=e; return ; } if(id<1)//插入位置小于1,插入线性表开头 id=1; int i; for(i=l->len-1; i>=id-1; i--)//原线性表第id(此时结构体数组下标为id-1)位置及其第id位置以后的数值全部向后移动一项 { l->elem[i+1]=l->elem[i]; } l->elem[id-1]=e; l->len++; }}
3.输出函数
void DisplayList(struct node *l)//遍历输出线性表{ if(l->len<1) return Error; int i; for(i=0; i<l->len; i++) { printf("%d ",l->elem[i]); } printf("\n");}
4 .删除函数
void DeleteList(struct node *l,int id)//删除指定位置的元素的值{ if(id<1||id>l->len) return ; int i; for(i=id-1; i<l->len-1; i++) { l->elem[i]=l->elem[i+1];//线性表第id位置(此时结构体数组下标为id-1)后的每项被后一项覆盖,即完成第id项的删除 } l->len--;//删除一项,线性表长度减少1}
5.销毁或清空线性表
void DestroyList(struct node *l)//销毁线性表{ l->len=0; free(l->elem);//清空结构体数组并释放内存}
void clearList(struct node *l)//清空线性表{ l->len=0;}
6.查找指定位置的值的函数
int GetList(struct node *l,int id)//查找指定位置的值{ if(id<1||id>l->len) return Error; return l->elem[id-1];}
7.查找已知值在线性表某位置的函数
int LocateList(struct node *l,int e)//查找某值在线性表的位置{ int i; for(i=0; i<l->len; i++) { if(l->elem[i]==e) { return i+1; } } return Error;}
8.判断线性表是否为空
bool ListEmpty(struct node *l)//判断线性表是否为空{ if(l->len==0) return true; return false;}
9.返回线性表长度
int ListLength(struct node *l)//返回线性表长度{ return l->len;}
10.返回线性表某位置的前驱或后驱元素
int PriorList(struct node *l,int e)//返回线性表非头先驱元素值{ int i; for(i=0; i<l->len; i++) { if(l->elem[i]==e) { if(i>0) { return l->elem[i-1]; } } } return Error;}int NextList(struct node *l,int e)//返回线性表非尾后驱元素值{ int i; for(i=0; i<l->len; i++) { if(l->elem[i]==e) { if(i<l->len-1) return l->elem[i+1]; } } return Error;}
完整代码:
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<stdbool.h>#define Error -10000#define length 100struct node//定义一个结构体(数组){ int *elem; int len; //存线性表长度};void InitList(struct node *l)//初始化线性表{ l->elem=(int *)malloc(sizeof(int)*length);//给结构体里的指针elem开length个interesting型的空间 l->len=0;}void DestroyList(struct node *l)//销毁线性表{ l->len=0; free(l->elem);//清空结构体数组并释放内存}void clearList(struct node *l)//清空线性表{ l->len=0;}int GetList(struct node *l,int id)//查找指定位置的值{ if(id<1||id>l->len) return Error; return l->elem[id-1];}bool ListEmpty(struct node *l)//判断线性表是否为空{ if(l->len==0) return true; return false;}int ListLength(struct node *l)//返回线性表长度{ return l->len;}int LocateList(struct node *l,int e)//查找某值在线性表的位置{ int i; for(i=0; i<l->len; i++) { if(l->elem[i]==e) { return i+1; } } return Error;}int PriorList(struct node *l,int e)//返回线性表非头先驱元素值{ int i; for(i=0; i<l->len; i++) { if(l->elem[i]==e) { if(i>0) { return l->elem[i-1]; } } } return Error;}int NextList(struct node *l,int e)//返回线性表非尾后驱元素值{ int i; for(i=0; i<l->len; i++) { if(l->elem[i]==e) { if(i<l->len-1) return l->elem[i+1]; } } return Error;}void ListInsert(struct node *l,int id,int e)//在指定位置插入某值{ if(l->len>length)//线性表长度超过length,报错 return Error; else { if(id>l->len)//插入位置大于当前线性表长度,插入线性表末尾 { l->elem[l->len++]=e; return ; } if(id<1)//插入位置小于1,插入线性表开头 id=1; int i; for(i=l->len-1; i>=id-1; i--)//原线性表第id(此时结构体数组下标为id-1)位置及其第id位置以后的数值全部向后移动一项 { l->elem[i+1]=l->elem[i]; } l->elem[id-1]=e; l->len++; }}void DeleteList(struct node *l,int id)//删除指定位置的元素的值{ if(id<1||id>l->len) return ; int i; for(i=id-1; i<l->len-1; i++) { l->elem[i]=l->elem[i+1];//线性表第id位置(此时结构体数组下标为id-1)后的每项被后一项覆盖,即完成第id项的删除 } l->len--;//删除一项,线性表长度减少1}void DisplayList(struct node *l)//遍历输出线性表{ if(l->len<1) return Error; int i; for(i=0; i<l->len; i++) { printf("%d ",l->elem[i]); } printf("\n");}int main(){ struct node list; InitList(&list);// ListInsert(&list,1,3);// ListInsert(&list,1,2);// ListInsert(&list,1,1);// DisplayList(&list);// DeleteList(&list,3);// DisplayList(&list);// DeleteList(&list,2);// DisplayList(&list);// DeleteList(&list,1);// DisplayList(&list);// DeleteList(&list,-1);// DisplayList(&list); return 0;}
希望对大家有所帮助.
0 0
- 数据结构之简单线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- 过滤器(filter)和拦截器(interceptor)区别
- 自然语言处理(NLP)的主要范畴
- linux下安装mysql5.7.17及简单配置
- android 自定义拍照录像
- php for mac 安装
- 数据结构之简单线性表
- tomcat手动指定jdk路径
- TortoiseGit安装与配置
- idea15破解 以及 idea15重置设置
- Android 输入系统(一)InputManagerService
- 数据挖掘中所需的概率论与数理统计知识
- 欢迎使用CSDN-markdown编辑器
- Android绘制折线图记录
- 系统学习深度学习(二十)--ResNet,DenseNet,以及残差家族