大家好,接近期末考试,相信大家都忙着复习,还有很多同学都不知道数据结构怎么办,是吧?
没关系,接下来这段时间我会持续更新数据结构的相关基本知识(附上源代码)
如果你的数据结构真的是马马虎虎的话,你看了就会懂一些吧!!
不过在下技术有限,可能代码有错,请见谅!!!!
事不宜迟,下面是线性表的基本操作:
///////////////////////// 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);
}
相信你懂得!!!