代码改变世界

线性表的顺序表示

2012-09-06 10:48  djky12  阅读(259)  评论(0)    收藏  举报

Seqlist.c函数

/*
功能:建立一个表,依次输入数据元素1,2,3,…,10,
然后删除数据元素5,最后依次显示当前表中的数据元素,
顺序实现。
*/
#include<stdio.h>
#define MaxSize 100
typedef int DataType;
#include"SeqList.h"

void main(void)
{
SeqList myList;
int i,x;

ListInitiate(&myList);
for(i = 0;i < 10;i++)
{
if(ListInsert(&myList,i,i+1) == 0)
{
printf("错误!\n");
return;
}
}

if(ListDelete(&myList,4,&x) == 0)
{
printf("错误!\n");
return;
}

for(i = 0;i < ListLength(myList);i++)
{
if(ListGet(myList,i,&x) == 0)
{
printf("错误!\n");
return;
}
else
{
printf("%d ",x);
}
}
}

 

Seqlist.h函数

typedef struct
{
DataType list[MaxSize]; //DataType为数组元素的数据类型,MaxSize表示数组的最大元素个数
int size; //size表示顺序表当前存储的数据元素个数
}SeqList; //SeqList是该结构体的名字


void ListInitiate(SeqList *L)//初始化顺序表L
{
L->size = 0; //定义初始数据元素个数
}


int ListLength(SeqList L)//返回顺序表L的当前数据元素个数
{
return L.size;
}


int ListInsert(SeqList *L,int i,DataType x)
/*在顺序表L的第i(0<=i<=size)个位置前插入数据元素值x*/
/*插入成功返回1,失败返回0*/
{
int j;
if(L->size >= MaxSize)
{
printf("顺序表已满无法插入!\n");
return 0;
}
else if(i<0 || i>L->size)
{
printf("参数i不合法!\n");
return 0;
}
else
{
//为插入做准备
for(j = L->size;j > i;j--)
{
L->list[j] = L->list[j-1];
}
L->list[i] = x;//插入x
L->size ++;//元素个数加1
return 1;
}
}


int ListDelete(SeqList *L,int i,DataType *x)
/*删除顺序表L中位置为i(0<=i<=size-1)的数据元素并存放到x中*/
/*删除成功返回1,删除失败返回0*/
{
int j;
if(L->size <= 0)
{
printf("顺序表已空数据元素可删!\n");
return 0;
}
else if(i<0 || i>L->size-1)
{
printf("参数i不合法");
return 0;
}
else
{
*x = L->list[i];//保存删除的元素到x中
}
for(j = i+1;j <= L->size-1;j++)
{
L->list[j-1]=L->list[j];
}
L->size--;//数据参数个数减1
return 1;
}


int ListGet(SeqList L,int i,DataType *x)
/*取顺序表L中第i个数据元素存于x中,成功返回1,失败返回0*/
{
if(i<0 || i>L.size-1)
{
printf("参数i不合法");
return 0;
}
else
{
*x = L.list[i];
return 1;
}
}