线性表
来源:互联网 发布:阿里云开发框架 编辑:程序博客网 时间: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;
}
- 线性表--线性存储
- 线性表 线性结构
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 有空研究一下,^_^
- 用鼠标拖动表格进行排序.
- POI读写Excel文件
- 有害食物的“解药”
- vbs(asp)的栈类
- 线性表
- 母校情怀--福建煤炭工业学校
- 在ASP中判断SQL语句是否执行成功
- 一分钟学会使用修复的stl库摆脱MSVCP60.dll
- linux安装配置jdk1.5、tomcat5.5、eclipse3.2详解
- 追MM与设计模式
- 给爱一个容器
- 解析Windows系统文件的完全清除
- WMAssistant for SmartPhone 简单介绍