第二章(线性表之顺序存储)
2014-11-04 09:50
162 查看
今天是通关数据结构这本书进程中的第一天,所以一定要耐着性子做下去。
目的:熟练使用顺序存储和链式存储。最后做出一个顺序存储的简单模板和一个完善的实现链式存储学生信息管理系统。
1.顺序表的存储结构
2.顺序表的基本操作(初始化、查找、插入、删除)
总结:顺序表的一系列操作相对而言是比较简单的,需要注意的是位序和数组下标不要搞混了,位序=数组下标+1。
对线性表顺序存储的简单实现:
输入测试数据:
————2014.11.4
目的:熟练使用顺序存储和链式存储。最后做出一个顺序存储的简单模板和一个完善的实现链式存储学生信息管理系统。
1.顺序表的存储结构
//-----顺序表的存储结构----- #define MAXSIZE 100//顺序表可能达到的最大长度。 typedef struct{ ElemType *elem;//基地址,相当于一个数组的首地址 int length;//当前长度 }Sqlist;//定义一个Sqlist类型,生成的数据具有Sqlist类型的空间存储区域。
2.顺序表的基本操作(初始化、查找、插入、删除)
//-----顺序表的初始化----- Status InitList_Sq(SqList &L){//构造一个空顺序表 L.elem= new ElemType[MAXSIZE];//为顺序表分配大小为MAXSIZE的存储空间 if(!L.elem) exit(OVERFLOW)//存储分配失败 L.length=0;//空表长度为0 return OK; }
//-----顺序表的查找----- Status LocateElem_Sq(SqList L,ElemType e){//查找是否具有e相等元素,并返回其“位序”。 for(i=0; i<L.length; i++){ if(L.elem[i]==e) return i+1; return 0; }//位序:位置顺序,而非下标。
//-----顺序表的插入----- Status ListInsert_Sq(SqList &L,int i, ElemType e){//在线性表L的第i个位置前插入元素e if(i<1||i>L.length+1||L.length==MAXSIZE) return ERROR; e=L.elem[i-1]; for(j=L.length-1; j>=i-1; j--) L.elem[j+1]=L.elem[j]; L.elem[i-1]=e; ++L.length; return OK; }
//-----顺序表的删除----- Status ListDelete_Sq(SqList &L,int i, ElemType &e){//删除线性表L的第i个位置的元素,并赋值给e if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; for(j=i; j<=L.length-1; j++) L.elem[j-1]=L.elem[j]; --L.length; return OK; }
总结:顺序表的一系列操作相对而言是比较简单的,需要注意的是位序和数组下标不要搞混了,位序=数组下标+1。
对线性表顺序存储的简单实现:
#include<iostream> #include<cstdlib> #define MAXSIZE 100 #define Status int #define ERROR 0 #define OVERFLOW -1 #define ElemType int #define OK 1 using namespace std; //-----顺序表的存储结构----- typedef struct{ ElemType *elem;//基地址,相当于一个数组的首地址 int length;//当前长度 }SqList; //-----顺序表的初始化----- Status InitList_Sq(SqList &L){//构造一个空顺序表 L.elem= new ElemType[MAXSIZE];//为顺序表分配大小为MAXSIZE的存储空间 if(!L.elem) exit(OVERFLOW);//存储分配失败 int len,i; cout<<"输入线性表长度"<<endl; cin>>len; for(i=0,L.length=0; i<len; i++){ cin>>L.elem[i]; ++L.length;//空表长度为0 } return OK; } //-----顺序表的查找----- Status LocateElem_Sq(SqList L,ElemType e){//查找是否具有e相等元素,并返回其“位序”。 for(int i=0; i<L.length; i++) if(L.elem[i]==e) return i+1; return 0; } //-----顺序表的插入----- Status ListInsert_Sq(SqList &L,int i, ElemType e){ if(i<1||i>L.length+1||L.length==MAXSIZE) return ERROR; for(int j=L.length-1; j>=i-1; j--) L.elem[j+1]=L.elem[j]; L.elem[i-1]=e; ++L.length; return OK; } //-----顺序表的删除----- Status ListDelete_Sq(SqList &L,int i, ElemType &e){ if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; for(int j=i; j<=L.length-1; j++) L.elem[j-1]=L.elem[j]; --L.length; return OK; } int main(){ SqList L; InitList_Sq(L); cout<<"线性表为:"<<endl; for(int i=0; i<L.length; i++) cout<<L.elem[i]<<" "; cout<<endl<<endl<<"在第三个位置插入元素3后,线性表为:"<<endl; ListInsert_Sq(L,3,3); for(int i=0; i<L.length; i++) cout<<L.elem[i]<<" "; int e; ListDelete_Sq(L,5,e); cout<<endl<<endl<<"第五个位置删除的元素为:"<<e; cout<<endl<<endl<<"查找等于13的元素位于第"<<LocateElem_Sq(L,13)<<"个位置"<<endl; //while(1); }
输入测试数据:
————2014.11.4
相关文章推荐
- 第二章:线性表-顺序存储(2)
- python实现线性表顺序存储的插入操作
- 第一部分 线性表的顺序存储(二)--动态分配
- 线性表线性(顺序)存储结构
- C _数据结构 _线性表的顺序存储
- 9. C#数据结构与算法 -- 线性存储结构(线性表之顺序表,动态数组和泛型实现)
- 线性表顺序存储
- 线性表的顺序存储
- Java数据结构——线性表的顺序存储实现
- 线性表的顺序存储
- (2) JAVA:线性表的顺序存储与链式存储
- 线性表的顺序存储--顺序表
- 数据结构:线性表(顺序存储)顺序栈类(实现创建,输出,入栈出栈,读栈顶元素功能)
- 顺序存储线性表的C++实现——严蔚敏版《数据结构》
- 线性表的顺序存储设计和实现 - API函数实现
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)
- 线性表的顺序存储实验程序
- 线性表的顺序存储
- 线性表的顺序存储