读书笔记 《数据结构》严蔚敏,第二章的线性表(顺序存储),C++描述。
List.h
#include
#include
typedef int Status;
enum S{OK=0,WRONG=-1};
typedef struct
{
int *elem;
int len;
int listsize;
} List;
Status InitList(List &L)
{
if((L.elem=new int[100])==NULL)
return WRONG;
L.len=0;
L.listsize=100;
return OK;
}
void DestroyList(List &L)
{
delete L.elem;
L.elem=NULL;
L.len=0;
L.listsize=0;
}
void ClearList(List &L)
{
L.len=0;
}
bool IsEmptyList(List &L)
{
return L.len==0;
}
int LocateElem(List L,int e,Status (*compare)(int e1,int e2))
{
int i=0;
while(i<=L.len && compare(L.elem[i],e)!=OK)
i++;
if(i<=L.len)
return i+1;
else
return 0;
}
Status Insert(List &L,int i,int e)
{
if(i<1||i>L.len+1)
return WRONG;
if(L.len==L.listsize)
{
int *newbase=new int[L.listsize*2];
memcpy(L.elem,newbase,L.listsize*sizeof(int));
L.listsize*=2;
delete L.elem;
L.elem=newbase;
}
int j;
for(j=L.len-1;j>=i-1;j--)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e;
L.len++;
return OK;
}
Status Get(List L,int i,int &e)
{
if(i<1||i>L.len)
return WRONG;
e=L.elem[i-1];
return OK;
}
Status Delete(List &L,int i,int &e)
{
if(i<1||i>L.len)
return WRONG;
e=L.elem[i-1];
int j;
for(j=i-1;j<=L.len-1;j++)
L.elem[j]=L.elem[j+1];
L.len--;
return OK;
}
Status PriorElem(List L,int cur_e,int &pre_e)
{
int i=0;
while(i i++;
if(i>=L.len)
return WRONG;
pre_e=L.elem[i-1];
return OK;
}
Status NextElem(List L,int cur_e,int &next_e)
{
int i=0;
while(i i++;
if(i>=L.len)
return WRONG;
next_e=L.elem[i+1];
return OK;
}
int ListLen(List &L)
{
return L.len;
}
void Change(List &L,void (*vi)(int &e))
{
int i;
for(i=0;i vi(L.elem[i]);
return ;
}
main.cpp
#include "List.h"
void sq(int &e)
{
e*=2;
}
int main()
{
using namespace std;
int tmp,i;
List L;
InitList(L);
for(i=1;i<=5;i++)
if(Insert(L,1,i)==OK)
std::cout<<"依次头部插入数据"< for(i=1;i<=L.len;i++)
if(Get(L,i,tmp)==OK)
std::cout<
for(i=1;i<=L.len;i++)
if(Get(L,i,tmp)==OK)
cout<
if(NextElem(L,2,tmp)==OK)
cout<
Change(L,sq);
for(i=1;i<=L.len;i++)
if(Get(L,i,tmp)==OK)
cout<
ClearList(L);
cout<
return 0;
}