分享
 
 
 

DataStructure----LinerList,线性表C实现

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

//=============================================================================

//LinerList.h

//=============================================================================

//初始化队列的长度

#define LIST_INIT_SIZE 100

//队列长度不足重新申请空间的默认增长幅度

#define LISTINCREMENT 10

//若干信号量定义

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define OVERFLOW 'o'

#define OUTB -2 //越界错误

//状态返回值类型定义

typedef int Status;

//队列元素定义

typedef struct Elemtyp

{

//不同需要的元素修改此处

int elem;

}ElemType;

//队列的类型定义

typedef struct Sq

{

ElemType *head;

int length;

int listsize;

}Sqlist;

//==============================================================

//函数声明部分:

//==============================================================

//线性表操作的工具函数

//比较函数

Status Compare ( ElemType e1, ElemType e2);

//访问函数

void Visit (Sqlist);

//线性表复制函数,把L1复制到L2中

Status Copy ( Sqlist L1, Sqlist L2);

//线性表的初始化

Status Init_Sq ( Sqlist &L );

//线性表空间的释放

Status Destory_Sq (Sqlist &L );

//线性表的清空

Status Clear_Sq ( Sqlist &L );

//判断是否空表

Status IsEmpty_Sq ( Sqlist L );

//获取当前表长

int Length_Sq ( Sqlist L );

//获取表中指定元素的值

Status GetElem_Sq ( Sqlist L, int i, ElemType &e );

//确定指定元素在表当中的位置

int LocateElem_Sq ( Sqlist L, ElemType e);

//返回指定位置元素的前驱

Status PriorElem ( Sqlist L, ElemType cur_e, ElemType &pri_e);

//返回指定位置元素的后继

Status NextElem ( Sqlist L, ElemType cur_e, ElemType &nex_e);

//对线性表的插入操作

Status ListInsert ( Sqlist &L, ElemType e, int pos);

//对线性表的删除操作

Status ListDelete ( Sqlist &L, ElemType &e, int pos);

//对线性表的遍历

Status Traverse ( Sqlist L);

//===============================================================================

//LinerList.cpp

//===============================================================================

//线性表加载文件

#include "stdafx.h"

#include "LinerList.h" //线性表定义文件

#include <malloc.h>

//函数实现部分

Status Init_Sq ( Sqlist &L)

{

L.head = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if ( !L.head) return OVERFLOW;

L.length = 0;

L.listsize = LIST_INIT_SIZE;

return OK;

}//Init_Sq

Status Destory_Sq ( Sqlist &L)

{

if ( !L.head) return ERROR;

free(&L);

L.head=NULL;

return OK;

}//Destory_Sq

Status Clear_Sq ( Sqlist &L)

{

int i;//内循环计数

if ( !L.head) return ERROR;

for(i = 0; i<L.length; i++)

L.head[i].elem = 0;

return OK;

}//Clear_Sq

Status IsEmpty_Sq ( Sqlist L)

{

if( !L.head) return TRUE;

return FALSE;

}//IsEmpty_Sq

int Length_Sq ( Sqlist L)

{

return L.length;

}//Length_Sq

Status GetElme_Sq ( Sqlist L, int pos, ElemType &e)

{

if( !L.head) return ERROR;

else if( pos < 0 || pos >= L.length)

return OVERFLOW;

e = L.head[pos-1];

return OK;

}//GetElem_Sq

Status Compare ( ElemType e1, ElemType e2)

{

if( e1.elem == e2.elem)

return TRUE;

return FALSE;

}//Compare

int LocateElem_Sq ( Sqlist L, ElemType e)

{

int i=0;//计数并记录位置

Status s;//判断是否找到

if ( !L.head) return ERROR;

for ( ; i < L.length; i++)

{

s = Compare ( L.head [ i - 1 ], L.head [ i - 2] );

if ( s) break;

}

if( s) return i;

return -1;

}//LocateElem_Sq

Status PriorElem ( Sqlist L, ElemType cur_e, ElemType &pri_e)

{

int _pos = 0;

_pos = LocateElem_Sq ( L, cur_e);

if ( _pos == -1) return ERROR;

else if ( _pos == 0 ) return OUTB;

pri_e = L.head[ _pos-1 ];

return OK;

}//PriorElem

Status NextElem ( Sqlist L, ElemType cur_e, ElemType &nex_e)

{

int _pos = 0;

_pos = LocateElem_Sq ( L, cur_e);

if ( _pos == -1) return ERROR;

else if( _pos == L.length-1 ) return OUTB;

nex_e = L.head [ _pos+1 ];

return OK;

}//NextElem

Status Copy ( Sqlist L1, Sqlist &L2)

{

if ( L1.head || L2.head) return ERROR;

else if ( L1.length <= L2.length ) return ERROR;

for ( int i = 0; i < L1.length; i++)

L2.head [ i ] = L1.head [ i ];

return OK;

}//Copy

Status ListInsert ( Sqlist &L, ElemType e, int pos)

{

ElemType *newbase;

if ( !L.head) return ERROR;

else if ( pos < 1 || pos > L.length+1 ) return OUTB;

if ( L.length == L.listsize)

{

newbase = ( ElemType *)realloc( L.head, ( L.length+LISTINCREMENT)

* sizeof ( ElemType) );

L.head = newbase;

}

for (int i = L.length; i >= pos-1; --i)

L.head [ i + 1 ] = L.head [ i ];

L.head [ i ] = e;

L.length++;

return OK;

}//ListInsert

Status ListDelete ( Sqlist &L, ElemType &e, int pos)

{

if( !L.head) return ERROR;

else if ( pos < 0 || pos >= L.length ) return OUTB;

for ( int i = pos-1; i < L.length-1; i++)

L.head [ i ] = L.head [ i+1 ];

L.length--;

return OK;

}//ListDelete

void Visit ( Sqlist L)

{

for ( int i = 0; i < L.length-1; i++)

printf ( " %d \n", L.head [ i ].elem);

}//Visit

Status Traverse ( Sqlist L)

{

if ( !L.head) return ERROR;

Visit( L);

return OK;

}//Traverse

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有