线性表存储结构建立工程实现线性表功能
特别注意事项:注意看每个包的头文件的声明
头文件能包含.h头文件,但是不能包含.c头文件,这是值得注意的地方
①将函数结果状态声明写在status.h包内
#ifndef STATUS_H
#define STATUS_H
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#endif
②将函数声明写在list.h包内
#ifndef LIST_H
#define LIST_H
#include "status.h"
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 20
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList (SqList *L);
int ListLength(SqList L);
int IsEmpty(SqList L);
int GetElem(SqList L,int i,ElemType *e);
int LocateELem(SqList L,ElemType e);
Status ListInsert(SqList *L,int i,ElemType e);
Status ListDelete(SqList *L,int i,ElemType *e);
#endif
③将函数的定义写在list.c包内
#include <stdio.h>
#include "list.h"
Status InitList (SqList *L)
{
L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(L->elem==NULL)
{
return ERROR;
}
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
int ListLength(SqList L)
{
return L.length;
}
int IsEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
int GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0||i<1||i>(L.length))
return ERROR;
*e=L.elem[i-1];
return OK;
}
int LocateELem(SqList L,ElemType e)
{
int i;
if (L.length==0)
return ERROR;
for(i=0;i<L.length;i++)
{
if (L.elem[i]==e)
break;
}
if(i==L.length)
return ERROR;
return i+1;
}
Status ListInsert(SqList *L,int i,ElemType e)
{
int k;
if(L->length==LIST_INIT_SIZE)
return ERROR;
if(i<1||i>(L->length+1))
return ERROR;
if(i<=L->length)
for(k=L->length;k>=i;k--)
L->elem[k]=L->elem[k-1];
L->elem[i-1]=e;
L->length++;
return OK;
}
Status ListDelete(SqList *L,int i,ElemType *e)
{
int k;
if (L->length==0)
return ERROR;
if (i<1 || i>L->length)
return ERROR;
*e=L->elem[i-1];
if (i<L->length)
for(k=i;k<L->length;k++)
L->elem[k-1]=L->elem[k];
L->length--;
return OK;
}
④将main函数实现线性表的功能写在status.c包内
#include "list.h"
#include <stdio.h>
int main()
{
SqList sqlist;
SqList *L=&sqlist;
ElemType value;
int t,i,n,site;
printf("==================构造空线性表==================");
t=InitList(L);
if(t==OK)
{
printf("\n线性表长度为:%d\n线性表当前的存储容量为:%d\n",L->length,L->listsize);
}
printf("==================求线性表长度==================");
printf("\n此时线性表的长度为:%d\n",ListLength(sqlist));
printf("==================判断线性表是否为空==================");
t=IsEmpty(sqlist);
if(t==TRUE)
printf("\n此时线性表为空\n");
else
printf("\n此时线性表并不为空\n");
printf("==================为线性表添加数据==================");
printf("\n请输入你要添加数据的个数:");
scanf("%d",&n);
printf("请依次输入%d个数据:",n);
for(i=1;i<=n;i++)
{
scanf("%d",&value);
ListInsert(L,i,value);
}
printf("插入数据后的线性表中的数据为:");
for(i=0;i<L->length;i++)
printf("%d ",L->elem[i]);
printf("\n==================在线性表第i位置插入元素==================");
printf("\n请输入你要插入元素的位置和所要插入的数:");
scanf("%d %d",&site,&value);
ListInsert(L,site,value);
printf("插入数据后的线性表中的数据为:");
for(i=0;i<L->length;i++)
printf("%d ",L->elem[i]);
printf("\n==================删除线性表中第i位置的元素,并返回所删除的元素==================");
printf("\n请输入你要删除元素的位置:");
scanf("%d",&site);
t=ListDelete(L,site,&value);
if(t==ERROR)
printf("你删除的数不在范围子内");
else{
printf("你删除的第%d个元素的值为:%d\n",site,value);
printf("删除数据后的线性表中的数据为:");
for(i=0;i<L->length;i++)
printf("%d ",L->elem[i]);
}
printf("\n==================获取线性表第i位置的元素==================");
printf("\n请输出你要获取元素的位置:");
scanf("%d",&site);
t=GetElem(sqlist,site,&value);
if(t==ERROR)
printf("你输入的获取元素的位置不正确");
else
printf("你所获取的第%d个元素为:%d",site,value);
printf("\n==================查询数据元素value,返回其位置==================");
printf("\n请输入你要查询的数据:");
scanf("%d",&value);
t=LocateELem(sqlist,value);
if(t==ERROR)
printf("抱歉,未找到查询结果");
else
printf("你所查询的元素“%d”已找到,位置为:%d\n",value,t);
}