您的位置:首页 > 其它

线性表的基本操作

2009-09-03 17:36 295 查看
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define ERROR 0
#define OK 1
#define init_size 5
#define increment 1

typedef int elemType;

typedef struct
{
elemType *elem;
int length;
int list_size;
}sqlist;

int init_list(sqlist &L) //初始化线性表
{
L.elem = (elemType*)malloc(init_size*sizeof(elemType));
if(L.elem == 0)
return ERROR;
else
return OK;
}

int insert_list(sqlist &L,int j,elemType e) //线性表的插入
{
elemType *newbase,*p,*q;
// p = L.elem;

newbase = (elemType*)realloc(L.elem, (L.list_size + increment)*sizeof(elemType));
L.list_size += increment;
if(newbase == NULL)
exit(ERROR);
else
L.elem = newbase;

q = &(L.elem[j-1]);
for( p = &(L.elem[L.length-1]);p >= q;p--)
{
*(p+1) = *(p);
}
*q = e;
++L.length;
return OK;

}

int delete_list(sqlist &L,int i,elemType &e) //删除线性表的第i个元素
{ //并把所删除的元素赋给参数e
elemType *p;
if((i < 1)||(i > L.length))
return ERROR;
for(p = &(L.elem[i-1]);p < &(L.elem[L.length]);p++)
{
*p = *(p+1);
}
e = L.elem[i-1];
--L.length;
return OK;

}
int loc_list(sqlist L,elemType e) //从线性表中查找元素e,如果不存在返回0
{
int i;
elemType *p_temp;
p_temp = L.elem;
for(i = 0;i< L.length;i++)
{
if(*L.elem == e)
{
L.elem = p_temp;
//printf("%d",i);
return i;
}
else
L.elem++;
}

return 0;
}
int next_elem(sqlist L,elemType e,elemType &next_e ) //求元素e的后继,如不存在返回0。
{
elemType i,j;
elemType *p_temp;
p_temp = L.elem;
i = loc_list(L,e);
if(i<1||i>L.length)
return ERROR;
for(j = 0;j < L.length-1;j++)
{
if(j == i+1)
{

next_e = *L.elem;
L.elem = p_temp;
return next_e;
}
else
L.elem++;
}
return ERROR;
}

void main()
{
sqlist L;
init_list(L);
L.length = init_size;
int e;
L.list_size = init_size;

for(int i = 0;i < L.list_size;i++ ) //初始化
{
L.elem[i] = 8-i;

}
for(int m = 0;m < L.list_size;m++)
{
printf("%d/n",L.elem[m]);
}
printf("/n");

insert_list(L,2,9); //插入运算

for(int j = 0;j < L.list_size;j++)
{
printf("%d/n",L.elem[j]);
}
printf("/n");
delete_list(L,2,e); //删除运算
for(int t = 0;t < L.length;t++)
{
printf("%d/n",L.elem[t]);
}
// printf("%d/n",e);
int next_e,next;
next = next_elem(L,7,next_e); //求所给元素的后继,如果是最后一个元素则返回0
printf("%d",next);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: