数据结构的学习笔记及相关记录(一)顺序表
学习数据结构有一段时间了总觉得知识点有点混乱所以今天特意写篇笔记记录下学习的路程。
一.线性表
1.顺序表示:最大的优点是可以随机存取,但是移动插入以及删除很不方便
2.链式表示
一下为顺序表示的一些基本算法
//定义一个顺序表的结构
typedef struct {ElemType *elem;int length;int listsize;}Sqlist;
// 构造一个空的线性表
int InitList_Sq(SqList &L){
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if( !L.elem )exit( OVERFLOW );
L.length = 0;
L.listsize = LIST_INIT_SIZE; //为线性表分配初始分配量
return OK;
}
//插入一个元素的函数主要操作有找到插入位置再把后面的元素依次后移还要考虑到
//是否空间的分配
int ListInsert_Sq(Sqlist &L,int i,ElemType e){
if( i<1 || i>L.length+1 ) return ERROR;
if( L.length>=L.listsize)
{
newbase = ( ElemType *) realloc (L.elem, (L.listsize+LISTINCREMENT) *sizeof(ElemType));
if( !newbase) exit (OVERFLOW);
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
q = &(L.elem[i-1]);
for(p = &(L.elem[L.length – 1]); p>=q; --p)
*(p+1) = *p;
*q = e;
++L.length;
return OK;
}
//输出所有节点的值
int Load_Sq(SqList &L)
{
int i;
if(L.length==0) printf(“The List is empty!”);
else
{
printf(“The List is: ”);
for(i=0;i<L.length;i++) printf("%d",L.elem[i]);
}
printf(“\n”);
return OK;
}