线性表

大家好,接近期末考试,相信大家都忙着复习,还有很多同学都不知道数据结构怎么办,是吧?

没关系,接下来这段时间我会持续更新数据结构的相关基本知识(附上源代码)

如果你的数据结构真的是马马虎虎的话,你看了就会懂一些吧!!

不过在下技术有限,可能代码有错,请见谅!!!!


事不宜迟,下面是线性表的基本操作:

/////////////////////////    head.h   //////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;

#define LIST_INIT_SIZE  50
#define LISTINCREMENT  10

///线性表的存取结构
struct sqList
{
int *elem; //基址(这里的是整形的,你也可以换成别的类型)
int lenght; //当前长度
int listSize; //总的长度
};

///初始化这个线性表
bool InitList( sqList &L )
{
L.elem=(int *)malloc( sizeof(int) * LIST_INIT_SIZE );
if( !L.elem )
{
return false;
}
L.lenght=0;
L.listSize=LIST_INIT_SIZE;
return true;
}

///插入(i是所在位置, e是插入元素)
bool Insert( sqList &L , int i, int e)
{
int *newbase;
int *q  ,  *p;

if( i<1 || i>L.lenght+1 ) //这种情况是不允许的,所直接return false
{
return false;
}

if( L.lenght >= L.listSize ) //这是不够位置的做法
{
newbase=( int * )realloc(L.elem,sizeof(int)*(LIST_INIT_SIZE+LISTINCREMENT) );
if( !newbase )
{
return false;
}
L.elem=newbase; //一定要有这一步,要不然你的修改会留在原来的地址上
L.listSize+=LISTINCREMENT;
}

q=&L.elem[i-1]; //q指向的是插入的位置(为什么都要减一呢?就是因为数组的下标是从0开始)
for( p=&(L.elem[L.lenght-1]) ; p>=q ; p-- ) //p是指向最后一个元素
{
*(p+1)=*p; //这里将元素不断往后挪
}
*q=e;
L.lenght++;
return true ;

}


///输出每一个元素
void ShowList( sqList L )
{
for( int i=0 ; i<L.lenght ; i++ )
{
cout<<L.elem[i]<<"  ";
}
cout<<endl;
}


///删除操作
bool Delete( sqList &L , int i )
{
int *p, *q;

if( i<1 || i>L.lenght ) //删除之前要稍微判断一下
{
return false ;
}
p=&L.elem[i-1];
q=&L.elem[L.lenght-1]; //这里的q是指到L的末尾,为什么是lenght减去1,是因为下表从0开始
for( p ; p<=q ; p++ )
{
*(p-1)=*p; //都往前挪
}
L.lenght--;
return true;
}


/////////////////////////   mian.cpp   ///////////////////////////////////////////////////////////
#include "head.h"

void ShowList( sqList L );
bool Insert( sqList &L , int i, int e);
bool InitList( sqList &L );
bool Delete( sqList &L , int i );



void main()
{
sqList L;
InitList(L);
for( int i=1 ; i<=5; i++)
{
Insert(L,i,i+2);  //我要插入的是3,4,5,6,7
}
ShowList(L);

Delete(L,1);
ShowList(L);
}


相信你懂得!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值