线性表的完整程序数据结构C语言版

发布 2019-07-11 12:34:57 阅读 6892

顺序表存储结构及常见操作(

#ifndef __seqlist__

#define __seqlist__

#include <>

*顺序表存储空间长度的最小值*/

#define listminsize 10

*顺序表存储结构类型定义*/

typedef struct

listdt *base; /顺序表空间基地址*/

int listsize; /顺序表空间尺寸*/

int len顺序表长度*/

seqlist;

*顺序表初始化*/

void listinitialize(seqlist *pl, int size)

if(size size=listminsize; /限定不能小于最小尺寸*/

pl->listsize=size;

pl->base=(listdt *)malloc(pl->listsize*sizeof(listdt));

if(!pl->base)

exit(exit_failure);

pl->len =0初始化空表*/

*按给定的下标取顺序表元素值*/

bool listelem(seqlist l, int index, listdt *pelem)

bool ***=true;

if(index<0 ||index> )

***=false参数越界*/

else*pelem=

return ***;

*求顺序表长度*/

int listlen(seqlist l)

return

*在顺序表中指定序号位置插入元素*/

bool listinsert(seqlist *pl, int pos, listdt d)

bool ***=true;

int i;

if(pos<0 ||pl->len>=pl->listsize ||pos>pl->len)

***=false;

elsereturn ***;

*把顺序表中指定序号的元素删除*/

bool listdel(seqlist *pl, int pos)

bool ***=true;

int i;

if(pos<0 ||pos>=pl->len)

***=false;

elsereturn ***;

*在顺序表中查找元素*/

int listloc(seqlist l, listdt d,bool (*equal)(listdt, listdt))

int pos=

while(pos>=0 &&equal)(

pos--;

return pos;

*取前导元素序号位置*/

bool listprior(seqlist l, int pos, int *ppriorpos)

bool ***=true;

if(pos>0 &&pos<

*ppriorpos=pos-1;

else***=false;

return ***;

*取后继元素序号位置*/

bool listnext(seqlist l, int pos, int *pnextpos)

bool ***=true;

if(pos>=0 &&pos<

*pnextpos=pos+1;

else***=false;

return ***;

*销毁顺序表*/

void listdestroy(seqlist l)

free(#endif

建议性测试用程序。

typedef enum bool;

typedef int listdt;

#include ""

void printseqlist(seqlist l)

int i;

listdt x;

printf("list:");

for(i=0; i

bool dataequal(int x, int y)

return (x==y)? true:false;

#define n 5

void main()

int i,prior,next;

listdt x,test[n]=;

seqlist l;

/*初始化顺序表*/

listinitialize(&l,n);

/*在表头插入n个元素*/

for(i=0; i listinsert(&l,0,test[i]);

printseqlist(l);

/*删除元素*/

listdel(&l,n/2);

printseqlist(l);

printf("input a key:");

scanf("%d",&x);

/*查找x在表中位置*/

i=listloc(l,x,dataequal);

/*求x的前导元素*/

if(listprior(l,i,&prior))

elseprintf("no prior.");

/*求x的后继*/

if(listnext(l,i,&next))

elseprintf("no next.");

/*求表长*/

printf("list length=%d",listlen(l));

/*销毁顺序表*/

listdestroy(l);

数据结构线性表答案

2.1 描述以下三个概念的区别 头指针,头结点,首元结点 第一个元素结点 解 头指针是指向链表中第一个结点的指针。首元结点是指链表中存储第一个数据元素的结点。头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。它可以对空表 非空表以及首...