c语言顺序表的初始化Status,数据结构(c语言版)顺序表的建立、初始化、插入、删除、遍历等12个基本操作及测试...

数据结构是计算机类学生基本上必修的一门课程,也是比较难得一门课程。对于初学者来说刚开始学肯定会不理解,感觉很难,所以最近写了个数据结构的顺序表。顺序表包含了初始化、判空、求表长、销毁、定位、删除、插入、等十二个基本操作。运行了一下感觉还可以,所以想拿出来和大家分享一下!以下是源代码,建立一个工程

第一个头文件:一些基本的定义声明

#include#include#define OK 1

#define FALSE -1

#define TURE 1

#define ERROR -1

#define OVERFLOW       -1

#define INFEASIBLE        -1

#define LIST_INIT_SIZE    100

#define LISTINCREMENT     10

typedef int Status;

typedef int ElemType;

typedef struct {

ElemType *elem;

int length;

int listsize;

}Sqlist;

第二个头文件:十二个基本函数

#include"header.h"

//1、初始化

Status InitList(Sqlist&L)

{

L.elem=((ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)));

if(!L.elem)

return ERROR;

L.length=0;

L.listsize= LIST_INIT_SIZE;

return OK;

}

//2、销毁

void  Destorylist(Sqlist&L)

{

if(L.elem)

free(L.elem);

L.elem=NULL;

}

//3、清空

void ClearList(Sqlist &L)

{

L.length=0;

}

//4、判空

Status EmptyList(Sqlist L)

{

if(L.length==0)

return TURE;

else

return FALSE;

}

//5、求表长

Status LengthList(Sqlist L)

{

return L.length;

}

//6、取元素

Status GetElem(Sqlist L, int i, ElemType &e)

{

if(i<1||i>L.length)

return ERROR;

else

return e=L.elem[i-1];

}

// 7、定位操作

Status LocateELem(Sqlist L, ElemType e)

{

int i=0;

for (i = 0; i < (L.length - 1); i++)

{

if(e==L.elem[i])

return i+1;

}

}

//8、求前驱

Status PriorElem(Sqlist L, ElemType pur_e, ElemType pre_e)

{

int  i;

ElemType *p,*q;

p=&L.elem[0];

for (i = 1; i < L.length - 1; i++)

{

if(pur_e==L.elem[i])

{

p=&L.elem[i];

break;

}

}

q=p-1;

pre_e=*q;

return pre_e;

}

//9、求后继

Status NextElem(Sqlist L, ElemType pur_e, ElemType next_e)

{

int i;

ElemType *p,*q;

p=&L.elem[0];

for (i = 0; i < L.length - 2; i++)

{

if (pur_e == L.elem[i])

{

p=&L.elem[i];

break;

}

}

q=p+1;

next_e=*q;

return next_e;

}

//10、插入

Status InsertElem(Sqlist L, int i, ElemType e)

{

ElemType *p,*q;

if(i<1||i>L.length)

return ERROR;

if (L.length == L.listsize)

{

L.elem=((ElemType*)realloc(L.elem,(LIST_INIT_SIZE+ LISTINCREMENT)*sizeof(ElemType)));

L.listsize= LIST_INIT_SIZE + LISTINCREMENT;

}

q=&L.elem[i-1];

for (p = &L.elem[L.length - 1]; p > q; p--)

*(p+1)=*p;

*(q+1)=e;

L.length++;

return e;

}

//11、删除

Status DeleteElem(Sqlist &L, int i, ElemType e)

{

ElemType *p,*q;

if(!L.elem)

return ERROR;

if(i<1||i>L.length)

return ERROR;

q=&L.elem[i-1];

e=*q;

for (p = &L.elem[i - 1]; p      {

*  p=*(p+1);

}

L.length--;

return e;

}

//12、遍历

void TraverList(Sqlist L)

{

int i;

for (i = 0; i < L.length; i++)

printf("%5d",L.elem[i]);

}

//14、比较

Status CompareList(Sqlist L, ElemType e1, ElemType e2)

{

if(e1>e2||e2==e2)

return TURE;

else

return FALSE;

}

主函数:对十二个基本操作的测试

#include "stdafx.h"

#include"header1.h"

int main()

{

Sqlist L;

InitList(L);

int a,b,c,d=0,f,g,i;

ElemType e=0;

//初始化测试

printf("初始顺序表的长度%d\n\n", LengthList(L));

printf("请输入要添加的元素个数:");

scanf_s("%d",&L.length);

//求表长测试

printf("\n当前顺序表的长度%d\n",LengthList(L));

printf("\n请输入线性表元素:");

for (i = 0; i scanf_s("%d",&L.elem[i]);

//遍历测试

printf("\n您输入的元素为:");

TraverList(L);

printf("\n");

//定位操作

printf("请输入你要定位的元素:");

scanf_s("%d",&g);

printf("%d的位置为:%d\n",g,LocateELem(L,g));

//求前驱测试

printf("请输入你想求前驱的元素:");

scanf_s("%d",&a);printf("\n");

printf("%d的前驱为:%d",a, PriorElem(L,a,d));

//求后继测试

printf("\n请输入你想求后继的元素: ");

scanf_s("%d",&f);printf("\n");

printf("%d的后继为:%d",f,NextElem(L,f,d));

//取元素测试

printf("\n接下来测试取元素\n\n请输入你想取出的元素位序:");

scanf_s("%d",&i);

printf("\n\n");

printf("你取出的元素为:%d",GetElem(L,i,e));

printf("\n\n");

//删除测试

printf("现在测试删除\n\n请输入删除位置: ");

scanf_s("%d",&b);

printf("\n");

printf("你删除的元素为: %d",DeleteElem(L,b,e));

printf("\n\n");

printf("现在线性表中的元素为:");

for(i=0;iprintf("%5d",L.elem[i]);

//插入测试

printf("\n现在测试插入\n");

printf("请输入你要插入的位置:");

scanf_s("%d",&c);

printf("\n");

printf("请输入你要插入的元素:");

scanf_s("%d",&e);

printf("\n");

printf("你插入的元素为:%d",InsertElem(L,c-1,e));

printf("\n");

printf("现在顺序表为: ");

for (i = 0; i < L.length + 1; i++)

printf("%5d",L.elem[i]);

return 0;

}

不懂得可以私信 1936365132@qq.com!

  • 14
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值