以下代码是对基础数据结构中的线性表的顺序实现,在VS2012下没问题
#include <stdio.h>
#define MAXLENGTH 20
struct list
{
int data[MAXLENGTH];
int length;
};
//增加元素
int insert(list& l, int e, int index)
{
if(index < 0 || index >= MAXLENGTH || index > l.length)
return -1;
else
{
int i = l.length -1;
for(; i >= index; --i)
{
l.data[i+1] = l.data[i];
}
l.data[index] = e;
++ l.length;
}
return 1;
}
//删除元素
int drop(list& l, int index)
{
if(l.length == 0 || index < 0 || index >= l.length)
return -1;
int i = index;
for(; i < l.length -1; ++i)
{
l.data[i] = l.data[i+1];
}
l.data[l.length -1] = '\0';
-- l.length;
return 1;
}
//获取元素
int getEle(list l, int index, int& e)
{
if(l.length == 0 || index < 0 || index >= l.length)
return -1;
e = l.data[index];
return 1;
}
//更改元素
int modify(list& l, int index, int e)
{
if(l.length == 0 || index < 0 || index >= l.length)
return -1;
l.data[index] = e;
return 1;
}
//获取前驱
int priorEle(list l, int e, int& pre)
{
int i = 0;
for(; i < l.length; ++i)
{
if(l.data[i] == e)
{
if(i > 0)
{
pre = l.data[i-1];
return 1;
}
}
}
return 0;
}
//获取后继
int next(list l, int e, int &next)
{
int i = 0;
for(;i < l.length; ++i)
{
if(l.data[i] == e)
{
if(i < l.length -1)
{
next = l.data[i +1];
return 1;
}
}
}
return 0;
}
//打印表
void printList(list l)
{
int i =0;
for(i = 0; i < l.length; ++i)
{
printf("%d ", l.data[i]);
}
printf("\n");
}
int main()
{
list l;
l.length =3;
l.data[0] = 1;
l.data[1] = 3;
l.data[2] = 2;
printList(l);
insert(l,5,3);
insert(l, 10, 4);
printList(l);
drop(l,3);
printList(l);
int e = 0;
getEle(l, 3, e);
printf("%d \n",e);
modify(l,3,20);
printList(l);
e = 3;
int pre = -1;
priorEle(l,e,pre);
printf("%d \n", pre);
int nextI =-1;
next(l,e,nextI);
printf("%d \n",nextI);
//防止命令行自动退出
getchar();
return 0;
}