线性表

来源:互联网 发布:阿里云开发框架 编辑:程序博客网 时间:2024/04/28 21:57

/*-------------------------------------
  程序说明:线性链表头文件 SqList.h
  日期:    2006.11.1
  作者:    DarrylFu
----------------------------------------*/

#include "stdio.h"
#include "stdlib.h"

#define Status int
#define OK 1
#define ERROR 0

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct
{
 int *elem;
 int length;
 int listsize;
}SqList;

int compare(int a,int b);

int visit(int e);

Status InitList_Sq(SqList &L);

Status DestroyList(SqList &L);

Status ClearList(SqList &L);

Status ListEmpty(SqList L);

Status ListLength(SqList L);

Status GetElem(SqList L,int i,int &e);

Status LocateElem(SqList L,int e,int(* compare)(int a,int b));

Status PriorElem(SqList L,int cur_e,int &pre_e);

Status NextElem(SqList L,int cur_e,int &next_e);

Status ListInsert(SqList &L,int i,int e);

Status ListDelete(SqList &L,int i,int &e);

Status ListTraverse(SqList L,int(* visit)(int e)); 

/*-------------------------------------
  程序说明:线性链表实现文件 SqList.cpp
  日期:    2006.11.1
  作者:    DarrylFu
----------------------------------------*/

#include "SqList.h"

int compare(int a,int b)
{
 if(a==b) return 1;
 else return 0;
}

int visit(int e)
{
 printf("%d/n",e);
 return 0;
}

Status InitList_Sq(SqList &L)
{
 L.elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
 if (!L.elem)
  return ERROR;
 L.listsize = LIST_INIT_SIZE;
 L.length = 0;
 
 return OK;
}

Status DestroyList(SqList &L)
{
 free(L.elem);
 L.length=NULL;
 L.listsize=NULL;
 return OK;
}

Status ClearList(SqList &L)
{
 L.length = 0;
 return OK;
}

Status ListEmpty(SqList L)
{
 if(L.length==0) return 1;
 else return 0;
}

Status ListLength(SqList L)
{
 return L.length;
}

Status GetElem(SqList L,int i,int &e)
{
 if(i<L.length)
 {
  e=L.elem[i];
  return OK;
 }
 else return ERROR;
}

Status LocateElem(SqList L,int e,int(* compare)(int a,int b))
{
 for(int i=0;i<L.length;i++)
  if(compare(e,L.elem[i]))
   return i;
 return -1;
}

Status PriorElem(SqList L,int cur_e,int &pre_e)
{
 for(int i=1;i<L.length;i++)
  if(L.elem[i]==cur_e)
  {
   pre_e=L.elem[i-1];
   return OK;
  }
 return ERROR;
}

Status NextElem(SqList L,int cur_e,int &next_e)
{
 for(int i=0;i<L.length-1;i++)
  if(L.elem[i]==cur_e)
   {
    next_e=L.elem[i+1];
    return OK;
   }
 return ERROR;
}

Status ListInsert(SqList &L,int i,int e)
{
 if(i<0||i>L.length) return ERROR;
 if(L.length==L.listsize)
 {
  int * newbase = (int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
  if(!newbase) return ERROR;
  L.elem = newbase;
  L.listsize += LISTINCREMENT;
 }
 int *q = &(L.elem[i]);
 for(int *p=&(L.elem[L.length]);p>q;--p) *(p+1)=*p;
 *q = e;
 ++L.length;
 return OK;
}
Status ListDelete(SqList &L,int i,int &e)
{
 if(i<0||i>=L.length) return ERROR;
 int *p= &(L.elem[i]);
 e=*p;
 int *q = L.elem + L.length;
 for(++p;p<q;++p) *(p-1)=*p;
 --L.length;
 return OK;
}
Status ListTraverse(SqList L,int(* visit)(int e))
{
 for(int i=0;i<L.length;i++)
  visit(L.elem[i]);
 return OK;
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕初期胃疼的厉害怎么办 怀孕胃疼的厉害怎么办 天然气热水器风口一封闭怎么办 热水器着火后火变大怎么办? 人如果没有天魂怎么办 被鬼魂附体了该怎么办 被吸血蠓咬了怎么办 股份公司大股东占用资金怎么办 抱小孩抱的胳膊疼怎么办 一个月好几个性伴侣怎么办 惹了势力大的人怎么办 给佛像换新法器旧的怎么办 cad填充图案拾取不了点怎么办 cad填充图案太密怎么办 桃木葫芦挂件裂口了怎么办 皮肤被太阳晒伤变黑怎么办 皮肤又粗又黑该怎么办 盆栽红薯长疯了怎么办 四叶草叶子发黄怎么办 美篇不想让别人看到怎么办 黑魂3暗灵入侵怎么办 问道手游账号忘了怎么办 问道手游密码忘了怎么办 毒蚂蚁咬了红肿怎么办 电脑开机后有电流声怎么办 小学生阅读方面不会总结怎么办 天龙八部手游转职装备怎么办 投简历没回应该怎么办? 开车开的腰疼怎么办 开车腰疼怎么办吃什么 58简历投错了怎么办 开了一天车腰疼怎么办 开车腰疼怎么办怎么解决好 球球大作战找不到主界面怎么办 在QQ上找不到主界面怎么办 mac地址被过滤了怎么办 续贷声明含非法字符怎么办 辞职老板不给结工资怎么办 辞职后老板不发工资怎么办 联想手机不自带系统升级怎么办 苹果6玩崩坏3卡怎么办