线性表基本操作(数据结构)C++

线性表的定义:最常用且最简单的数据结构。

本篇文章介绍了线性表的插入,删除,建立空表等的操作,而且每一句都有注释,希望大家多多支持。

#include"iostream"
#include"cstdio"
#include"cstring"
#define list_init_size 100
#define listincrement 10
using namespace std;
typedef struct{
int *elem;
int length;//表示线性表的当前长度
int listsize;//表示线性表的存储空间大小
}sqlist;
int initlist(sqlist &l){
l.elem=new int (list_init_size);//为线性表分配空间
if(!l.elem)
return 0;
l.length=0;//为存储数据,所以是零
l.listsize=list_init_size;//但是已经分配好了内存空间
return 1;
}//构造一个空的线性表
int insert(sqlist &l,int i,int e){
if(i<1||i>l.length+1)
return 0;//在线性表外进行的操作,所以直接退出
if(l.length>=l.listsize){
int *newbase;
newbase=new int (l.listsize+listincrement);//C++申请动态内存的做法
if(!newbase)
return 0;//如果没有申请到则直接退出
l.elem=newbase;//将新开辟的空间的首地址赋值给elem
l.listsize+=listincrement;//更新它的最大内存
}
int *q;
q=&(l.elem[i-1]);
for(int *p=&(l.elem[l.length-1]);p>=q;–p){
*(p+1)=*p;//将q以后的所有数据向后一位
}
*q=e;//将e插入到q的位置
++l.length;//总长度加一
return 1;
}//在线性表中插入数据
int listdelete(sqlist &l,int i,int &e){
if(i<1||i>=l.length)
return 0;
int *p;
p=&(l.elem[i-1]);//指向要删除位置
e=*p;//将要删除位置元素的指赋值给e
int *q;
q=l.elem+l.length;//q指向最后一个的位置
for(++p;p<=q;++p){
*(p-1)=*p;//将p以后的元素全部进行左移
}
–l.length;//长度减一
return 1;
}//删除线性表的第i个元素
int getelem(sqlist &l,int i,int &e){
int *q;
q=&(l.elem[i-1]);
e=*q;
return 1;
}//得到线性表第i个元素的值
void locateElem(sqlist &l,int e){
int i=0,*q;
q=&(l.elem[i]);
if(e!=*q){
i++;
}
else
cout< }
return;
}
void printf_list(sqlist &l){
for(int i=0;i cout< }
cout< }//输出线性表
int main(int argc, char const *argv[]) {
sqlist l;
int a,b;
initlist(l);
insert(l,1,9);
insert(l,2,8);
insert(l,2,7);
printf_list(l);
listdelete(l,2,a);
printf_list(l);
getelem(l,2,b);
cout< locateElem(l,9);
return 0;
}

你可能感兴趣的:(线性表基本操作(数据结构)C++)