数据结构--线性表顺序实现
2015-01-06 13:49
176 查看
主要参考严老师那本教材:
#include <stdio.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100//线性表存储空间初始分配量
#define LISTINCREMENT 10//空间不够时,增量分配
#define ElemType int
typedef struct
{
ElemType *elem;//当前分配的存储空间基址
int length;//当前长度------说明一般length<=listsize
int listsize;//当前分配的存储空间容量(以元素个数为单位,即sizeof(ElemType)为单位
}sqList;
//初始化线性表,主要是分配存储空间
int initSqList(sqList *l)
{
if(NULL==l)
return 0;//失败
else
{
l->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(NULL==l->elem)
return 0;//失败
l->length=0;
l->listsize=LIST_INIT_SIZE;
return 1;
}
return 1;
}
//在线性表某个位置(前)插入一个节点,pos范围:0----l->length
int insertElem(sqList *l,int pos,ElemType e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>l->length)
return 0;
//空间不足,增量分配
if(l->length==l->listsize)
{
ElemType *newbase=NULL;
newbase=(ElemType *)realloc(l->elem,sizeof(ElemType)*(l->listsize+ LISTINCREMENT));
if(!newbase)
return 0;//分配失败
l->listsize+=LISTINCREMENT;
l->elem=newbase;
}
//移动数据,腾出位置
int j;
for (j=l->length; j>=pos+1; j--)
(l->elem)[j]=(l->elem)[j-1];
//插入新元素
(l->elem)[j]=e;
l->length++;
return 1;//成功
}
//在线性表某个位置删除一个节点,并且用*e返回其值,pos范围:0----l->length-1
int deleteElem(sqList *l,int pos,ElemType *e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>=l->length)
return 0;
*e=(l->elem)[pos];
for (int i=pos; i<=l->length-2; i++)
(l->elem)[i]=(l->elem)[i+1];
l->length--;
return 1;
}
//找值等于e的某个元素,返回其位置0---l->length-1
int searchByElem(sqList *l,ElemType e)
{
if(NULL==l)
return 0;
for (int i=0; i<l->length; i++)
{
if(e==(l->elem)[i])
return i;//找到,返回位置
}
return -1;//未找到
}
int searchByIndex(sqList *l,int pos,ElemType *e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>=l->length)
return 0;//查找失败
else
*e=l->elem[pos];
return 1;
}
void printSqList(sqList *l)
{
if(NULL==l)
return ;
for (int i=0; i<l->length; i++)
{
printf("%d ",(l->elem)[i]);
}
printf("\n");
}
int main()
{
sqList mylist1;
initSqList(&mylist1);
insertElem(&mylist1,0,5);
insertElem(&mylist1,0,4);
insertElem(&mylist1,0,3);
insertElem(&mylist1,0,2);
insertElem(&mylist1,0,1);
printSqList(&mylist1);
ElemType tmp;
deleteElem(&mylist1,2,&tmp);
printSqList(&mylist1);
printf("%d\n",tmp);
searchByIndex(&mylist1,1,&tmp);
printf("index:1,val:%d\n",tmp);
int pos=searchByElem(&mylist1,5);
printf("5'pos: %d\n",pos);
return 0;
}
#include <stdio.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100//线性表存储空间初始分配量
#define LISTINCREMENT 10//空间不够时,增量分配
#define ElemType int
typedef struct
{
ElemType *elem;//当前分配的存储空间基址
int length;//当前长度------说明一般length<=listsize
int listsize;//当前分配的存储空间容量(以元素个数为单位,即sizeof(ElemType)为单位
}sqList;
//初始化线性表,主要是分配存储空间
int initSqList(sqList *l)
{
if(NULL==l)
return 0;//失败
else
{
l->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(NULL==l->elem)
return 0;//失败
l->length=0;
l->listsize=LIST_INIT_SIZE;
return 1;
}
return 1;
}
//在线性表某个位置(前)插入一个节点,pos范围:0----l->length
int insertElem(sqList *l,int pos,ElemType e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>l->length)
return 0;
//空间不足,增量分配
if(l->length==l->listsize)
{
ElemType *newbase=NULL;
newbase=(ElemType *)realloc(l->elem,sizeof(ElemType)*(l->listsize+ LISTINCREMENT));
if(!newbase)
return 0;//分配失败
l->listsize+=LISTINCREMENT;
l->elem=newbase;
}
//移动数据,腾出位置
int j;
for (j=l->length; j>=pos+1; j--)
(l->elem)[j]=(l->elem)[j-1];
//插入新元素
(l->elem)[j]=e;
l->length++;
return 1;//成功
}
//在线性表某个位置删除一个节点,并且用*e返回其值,pos范围:0----l->length-1
int deleteElem(sqList *l,int pos,ElemType *e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>=l->length)
return 0;
*e=(l->elem)[pos];
for (int i=pos; i<=l->length-2; i++)
(l->elem)[i]=(l->elem)[i+1];
l->length--;
return 1;
}
//找值等于e的某个元素,返回其位置0---l->length-1
int searchByElem(sqList *l,ElemType e)
{
if(NULL==l)
return 0;
for (int i=0; i<l->length; i++)
{
if(e==(l->elem)[i])
return i;//找到,返回位置
}
return -1;//未找到
}
int searchByIndex(sqList *l,int pos,ElemType *e)
{
if(NULL==l)
return 0;
if(pos<0 || pos>=l->length)
return 0;//查找失败
else
*e=l->elem[pos];
return 1;
}
void printSqList(sqList *l)
{
if(NULL==l)
return ;
for (int i=0; i<l->length; i++)
{
printf("%d ",(l->elem)[i]);
}
printf("\n");
}
int main()
{
sqList mylist1;
initSqList(&mylist1);
insertElem(&mylist1,0,5);
insertElem(&mylist1,0,4);
insertElem(&mylist1,0,3);
insertElem(&mylist1,0,2);
insertElem(&mylist1,0,1);
printSqList(&mylist1);
ElemType tmp;
deleteElem(&mylist1,2,&tmp);
printSqList(&mylist1);
printf("%d\n",tmp);
searchByIndex(&mylist1,1,&tmp);
printf("index:1,val:%d\n",tmp);
int pos=searchByElem(&mylist1,5);
printf("5'pos: %d\n",pos);
return 0;
}
相关文章推荐
- 重温数据结构-线性表的顺序表示与实现
- 终于完成~《数据结构》实验二:线性表的实验(实现一个N个学生成绩的顺序表)
- 数据结构--线性表.顺序表(C语言实现)
- 数据结构-线性表之顺序储存(Java实现)
- javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现
- 线性表的顺序表示和实现(数据结构)
- 数据结构 - 线性表的顺序实现
- 数据结构-线性表的顺序存储实现及各种操作代码
- 数据结构->线性表的顺序实现 ATD
- 数据结构--线性表(顺序实现,链式实现,多项式计算)
- 【数据结构】-线性表的顺序表示和实现
- 数据结构---线性表的顺序实现
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)
- 数据结构:线性表(顺序存储)顺序栈类(实现创建,输出,入栈出栈,读栈顶元素功能)
- 《数据结构》线性表:顺序存储结构(顺序表的)实现示例代码
- [数据结构]线性表之顺序表的类模板实现
- 数据结构第一天、线性表的顺序表示与实现
- PHP数据结构之二 线性表中的顺序表的PHP实现
- 线性表的顺序存储实现(陈越数据结构版)
- 数据结构—线性表的顺序表示与实现