线性表之顺序表示及实现
2012-05-04 16:47
369 查看
线性表的特点为:存在唯一的一个首元素;除第一个元素外,都只有一个前驱元素;除最后一个外,都只有一个后继元素。线性表作为一种最简单的数据结构,为N个数据元素的有限序列,其按照存储方式可以分为顺序表和链式表。
首先看顺序表,顾名思义,顺序表即利用一组地址连续的存储单元依次存储线性表中的元素,优点是可随机存取,缺点是不利于删除及插入等操作。
顺序表的数据结构如下:
其中ElemType为线性表中数据元素的类型,定义方式为typedef int ElemType;
下面以线性表的插入、删除、合并及查找来了解及熟悉线性表的操作。
首先看顺序表,顾名思义,顺序表即利用一组地址连续的存储单元依次存储线性表中的元素,优点是可随机存取,缺点是不利于删除及插入等操作。
顺序表的数据结构如下:
struct Sqlist{ ElemType *elem; int listSize; int length; };
其中ElemType为线性表中数据元素的类型,定义方式为typedef int ElemType;
下面以线性表的插入、删除、合并及查找来了解及熟悉线性表的操作。
#include<iostream>
using namespace std;
typedef int ElemType;
const int listInitSize = 50;
const int listIncrementSize = 10;
struct Sqlist{ ElemType *elem; int listSize; int length; };
//初始化线性表
void initSqlist(Sqlist &L){
L.elem = (ElemType*)malloc(listInitSize*sizeof(ElemType));
if(!L.elem)
exit(-1);
L.length = 0;
L.listSize = listInitSize;
}
//插入元素
void insertSqlist(Sqlist &L,ElemType elem,int pos){
if(pos>L.listSize||pos>L.length){
cout<<"超出范围"<<endl;
exit(-1);
}
for(int i=0;i<L.length-pos;i++){
L.elem[L.length-i] = L.elem[L.length-i-1];
}
L.elem[pos] = elem;
L.length++;
if(L.length == L.listSize)
{
ElemType *newbase = (ElemType*)realloc(L.elem,(L.listSize+listIncrementSize)*sizeof(ElemType));
L.elem = newbase;
L.listSize += listIncrementSize;
}
}
//删除元素
void deleteSqlist(Sqlist &L,int pos){
if(pos>L.length){
cout<<"sorry,线性表中的数据元素没这么多"<<endl;
exit(-1);
}
for(int i=0;i<pos;i++){
L.elem[pos] = L.elem[pos+1];
}
L.length--;
}
//判断元素是否在线性表中
bool exist(Sqlist L,ElemType elem){
for(int i=0;i<L.length;i++){
if(L.elem[i] == elem){
return true;
}
}
return false;
}
//合并线性表
void mergeSqlist(Sqlist &L1,Sqlist L2){
for(int i=0;i<L2.length;i++){
if(!exist(L1,L2.elem[i])){
insertSqlist(L1,L2.elem[i],L1.length);
}
}
}
//销毁线性表
void destroySqlist(Sqlist &L){
if(!L.elem){
cout<<"线性表不存在"<<endl;
exit(0);
}
free(L.elem);
L.elem = NULL;
L.length = 0;
L.listSize = 0;
}
//打印线性表
void printSqlist(Sqlist L)
{
cout<<"线性表的元素为:"<<endl;
for(int i=0;i<L.length;i++){
cout<<L.elem[i]<<" ";
}
cout<<endl;
}
void main(){
Sqlist L1;
initSqlist(L1);
for(int i=0;i<15;i++){
insertSqlist(L1,i*2,i);
}
printSqlist(L1);
Sqlist L2;
initSqlist(L2);
for(int j=0;j<15;j++){
insertSqlist(L2,j*3,j);
}
printSqlist(L2);
mergeSqlist(L1,L2);
printSqlist(L1);
deleteSqlist(L1,4);
printSqlist(L1);
destroySqlist(L1);
destroySqlist(L2);
printSqlist(L1);
printSqlist(L2);
}
相关文章推荐
- 数据结构教程 第六课 线性表的顺序表示和实现
- 数据结构之线性表的顺序表示和实现
- 数据结构—线性表的顺序表示与实现
- 【练习】线性表的顺序表示实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示与实现
- 2.2笔记一线性表的顺序表示和实现
- 2.2线性表的顺序表示和实现
- 数据结构-----线性表的顺序表示与实现
- 线性表的顺序表示和基本操作的实现
- 线性表的顺序表示(C语言实现)
- 线性表的顺序表示和实现
- 线性表的顺序表示及实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 1.2线性表的顺序表示和实现
- Java实现线性表-顺序表示和链式表示
- 数据结构学习之路-第二章:线性表的顺序表示与实现
- 线性表的顺序表示和实现