线性表的顺序表示和实现模板

把这代码贴出来只是方便自己日后需用到顺序表时,提供个想法。毕竟这是自己在课堂上实现并理解好的,代码考虑不贴全了

/*线性表的顺序表示和实现*/
#ifndef SQLIST_H_INCLUDED
#define SQLIST_H_INCLUDED
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OK 1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct {
ElemType *elem;
    int length;
    int listsize;
}SqList;
Status 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;
}
Status ListLength(SqList l)
{ 
    return l.length;
}

Status GetElem(SqList l,int i,ElemType &e)
{ 
    if(i<1||i>l.length)
    exit(ERROR);
    e=*(l.elem+i-1);
    return OK;
}
Status ListInsert_Sq(SqList &L,int i,ElemType e)
{
     ElemType *newbase,*q,*p;
  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;
}

Status Equal(ElemType a,ElemType b)
{
    if(a==b)
    return TRUE;
    else
    return FALSE;
}
Status LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
 {
   ElemType *p;
   int i=1;
   p=L.elem;
   while(i<=L.length&&!(*compare)(*p++,e))
     ++i;
   if(i<=L.length)
     return i;
   else
     return 0;
 }
 void print(ElemType c)
 {
   printf("%d ",c);
 }
Status ListTraverse(SqList l,void(*vi)(ElemType))
 {
   ElemType *p;
   int i;
   p=l.elem;
   for(i=1;i<=l.length;i++)
     vi(*p++);
   printf("\n");
   return OK;
 }
Status DestroyList(SqList  &l)
{
     if (l.elem) free(l.elem);
     return OK;
}
Status Clearlist(SqList &l)
{
    l.length=0;
     return OK;
}

Status ListDelete(SqList &l,int i,ElemType &e)
{
    ElemType *q,*p;
 if(i<1||i>l.length)
 return ERROR;
    q=&(l.elem[i]);
 for(p=q;p<=&(l.elem[l.length-1]);p++)
     *(p-1)=*p;
     e=*q;
     -- l.length;
 return OK;
}
#endif // SQLIST_H_INCLUDED



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值