读书笔记-《数据结构》第二章-线性表的顺序存储

读书笔记 《数据结构》严蔚敏,第二章的线性表(顺序存储),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;
}

Leave a Reply

Your email address will not be published.