线性表的顺序列表的定义、初始化等操作

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERR 0
#define MAXSIZE 100
//定义顺序存储结构

typedef struct list{
int elem[MAXSIZE];
int last;
}SeqList;

//初始化线性表
SeqList *InitList()
{
SeqList *L;
L = (SeqList *)malloc(sizeof(SeqList));
L->last = 0;
return L;
}

//查找操作,按内容查找
int Locate(SeqList *L,int e)
{
int i=0;
for (i;i<L->last-1;i++)
{
if (L->elem[i]==e)
{
return i+1;
}
}
return -1;
}

//插入操作.在表的第i个位置前插入一个新元素

int InsList(SeqList *L,int i,int e)
{
int k;
if (i<1||i>L->last+1)
{
printf("插入位置不合法!");
return ERR;
}
if (L->last>=MAXSIZE)
{
printf("表已满,无法插入!");
return ERR;
}

for (k=L->last-1;k>=i;k--)
{
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;
L->last++;
return OK;
}

//删除表的第i个元素,并且用指针e返回其值
int DelList(SeqList *L,int i,int *e)
{
int k;
if (i<1||i>L->last)
{
printf("删除位置不合法!");
return ERR;
}
*e=L->elem[i-1];
for (k=i-1;k<L->last;k++)
{
L->elem[k]=L->elem[k+1];
}
L->last--;
return OK;
}
//线性表的输出
void print_seqList(SeqList *L)
{
int j;
for (j=1;j<=L->last;j++)
{
printf("%d\t",L->elem[j-1]);
if (j%5==0)
{
printf("\n");
}
}
}
int main()
{

SeqList *L;
L=InitList();
int a,j,locate,e;
for (j=1;j<10;j++)
{
printf("请输入要插入的数字:\n");
scanf("%d",&a);
InsList(L,a,j);
}
printf("\n");
printf("————————————————————:\n");
printf("————————————————————:\n");
printf("插入后的列表为:\n");
print_seqList(L);
printf("\n");
printf("————————————————————:\n");
printf("————————————————————:\n");
printf("查找元素5是否存在,显示下标:\n");
locate = Locate(L,5);
printf("%d\n",locate);
printf("————————————————————:\n");
printf("————————————————————:\n");
printf("删除第7个元素,返回被删除的元素:\n");
DelList(L,7,&e);
printf("被删除的元素是:%d\n",e);
return 0;
}

posted @ 2015-09-22 20:43  浩月白雪  阅读(3500)  评论(0编辑  收藏  举报