线性表之基于数组的实现
来源:互联网 发布:福建网络电视台电话 编辑:程序博客网 时间:2024/06/07 15:24
欢迎关注,大家共同学习!
线性表是有n个元素组成的有限序列,有两种存储结构:顺序存储结构和链式存储结构,这一篇简单介绍顺序存储结构。
顺序存储结构的特点:
(1)、它的物理顺序和物理顺序一致;
(2)、数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现的;
由于数组具有以上特点,因此可以基于数组来实现顺序存储结构。先来看看它的定义,我们用结构体来实现;
typedef struct sqlist{ ElemType Elem_array[MAX_SIZE]; int length;}SqList;这个结构体包含两项,一个是底层数组,一个表示数组的当前长度;
在线性表中,一般还会涉及到一些基本操作,比如初始化、插入、删除、查找、修改、求长度等,下边一一实现这些功能;
1、顺序线性表的初始化:
Status SqList_Init(SqList *L){ L->length=0; return OK;}2、顺序线性表的插入:
Status SqList_Insert(SqList *L,int i,ElemType e){ if(i<0||i>(L->length)) return ERROR; if((L->length)>=MAX_ARRAY_SIZE) { cout<<"线性表溢出!"<<endl; return ERROR; } for(int j=L->length;j>i;j--) L->Elem_array[j]=L->Elem_array[j-1]; L->Elem_array[i]=e; L->length++; return OK;}
3、顺序线性表的删除:
Status SqList_Delete(SqList *L,int i,ElemType *temp){ if(i<0||i>(L->length-1)) return ERROR; if((L->length)<=0) { cout<<"线性表空!"<<endl; return ERROR; } *temp=L->Elem_array[i]; for(int j=i+1;j<=L->length-1;j++) { L->Elem_array[j-1]=L->Elem_array[j]; } L->length--; return OK;}
4、顺序表的定位查找删除:从表中查找第一个值为x的元素删除
Status SqList_Locate_Delete(SqList *L,ElemType x){ int i=0,k; while(i<L->length) { if(x!=L->Elem_array[i]) i++; else { for(k=L->length-1;k>i;k++) { L->Elem_array[k-1]=L->Elem_array[k]; } L->length--; break; } } if(i>L->length) { cout<<"删除的元素不存在!"<<endl; return ERROR; } return OK;}5、顺序表的查找:即返回查找值的下标
Status SqList_Search(SqList *L,ElemType e){ int i=0; while(i<L->length) { if(e!=L->Elem_array[i]) i++; else { return i; break; } } if(i>L->length) { cout<<"查找的元素不存在!"<<endl; return ERROR; }}
6、顺序表返回长度
Status SqList_getLength(SqList *L){ return L->length;}顺序存储结构的线性表比较简单,简单的介绍就到这里,下边是测试代码:
#include <iostream>#define OK 1#define ERROR -1#define MAX_ARRAY_SIZE 100typedef int Status;typedef int ElemType;using namespace std;//typedef struct sqlist{ ElemType Elem_array [MAX_ARRAY_SIZE]; int length;}SqList;Status SqList_Init(SqList *L){ L->length=0; return OK;}Status SqList_Insert(SqList *L,int i,ElemType e){ if(i<0||i>(L->length)) return ERROR; if((L->length)>=MAX_ARRAY_SIZE) { cout<<"线性表溢出!"<<endl; return ERROR; } for(int j=L->length;j>i;j--) L->Elem_array[j]=L->Elem_array[j-1]; L->Elem_array[i]=e; L->length++; return OK;}Status SqList_Delete(SqList *L,int i,ElemType *temp){ if(i<0||i>(L->length-1)) return ERROR; if((L->length)<=0) { cout<<"线性表空!"<<endl; return ERROR; } *temp=L->Elem_array[i]; for(int j=i+1;j<=L->length-1;j++) { L->Elem_array[j-1]=L->Elem_array[j]; } L->length--; return OK;}Status SqList_Locate_Delete(SqList *L,ElemType x){ int i=0,k; while(i<L->length) { if(x!=L->Elem_array[i]) i++; else { for(k=L->length-1;k>i;k++) { L->Elem_array[k-1]=L->Elem_array[k]; } L->length--; break; } } if(i>L->length) { cout<<"删除的元素不存在!"<<endl; return ERROR; } return OK;}Status SqList_Search(SqList *L,ElemType e){ int i=0; while(i<L->length) { if(e!=L->Elem_array[i]) i++; else { return i; break; } } if(i>L->length) { cout<<"查找的元素不存在!"<<endl; return ERROR; }}Status SqList_getLength(SqList *L){ return L->length;}int main(){ int temp,location; SqList L; SqList_Init(&L); cout<<"表中插入了元素:"<<endl; for(int i=0;i<10;i++) { SqList_Insert(&L,i,i+1); cout<<L.Elem_array[i]<<endl; } SqList_Delete(&L,4,&temp); cout<<"删除了:"<<temp<<endl; location=SqList_Search(&L,6); cout<<"查找元素6的位置是:"<<location<<endl; cout<<"修改后的表:"<<endl; for(int i=0;i<SqList_getLength(&L);i++) { cout<<L.Elem_array[i]<<endl; } cout<<"表长:"<<L.length<<endl; return 0;}
阅读全文
0 0
- 线性表之基于数组的实现
- 基于数组对线性表的实现
- 基于数组的顺序线性表的实现
- 典型数据结构:线性表(基于数组的实现)
- 基于数组实现顺序存储的线性表
- 线性表之基于链表的实现
- 基于数组和基于链表线性表C++实现
- 线性表的数组实现
- java数据结构:线性表之数组实现
- 1.数据结构--线性表之数组实现
- 数据结构之线性表(数组实现)
- 线性表之数组实现栈结构
- 线性表-数组实现
- 线性表数组实现
- MyArrayList(数组线性表的实现)
- 数组实现线性表的顺序存储
- C++用数组实现的线性表
- 【java】数组线性表的实现
- PyQt5学习教程8:使用Box Layout布局控件
- 从核外电子(electron)到应用软件(software)------谈谈抽象和认知
- 451. Sort Characters By Frequency (sort)
- MyBatis 基于Mapper的增删改查示例(Spring IOC注入)
- Codeforces Round #441 (Div.2)
- 线性表之基于数组的实现
- PAT乙级1014. 福尔摩斯的约会(20)
- 深夜随想,如何突破瓶颈
- C#操作字符串方法总结<转>
- [生而为人-思考] Knowledge Cooking 分享会记录 -1
- 编写数据库连接类
- 线程同步
- python 字符串的split()函数详解
- 位运算