顺序表的各种基本运算

来源:互联网 发布:华为官方软件下载 编辑:程序博客网 时间:2024/05/19 00:35

其中函数包括如下

1.  Initlist(sqlist *&l):初始化顺序表l.

2.  Destroylist(sqlist *l):释放顺序表l.

3.  Listempty(sqlist *l):判断顺序表l是否为空表.

4.  Listlength(sqlist *l):返回顺序表l的元数个数.

5.  Displist(sqlist *l):输出顺序表l.

6.  Getelem(sqlist *l,int I,elemtype &e):获取顺序表l 中第i个元数.

7.  Locateelem(sqlist *l,elemtype e):在顺序表l中查找元数e.

8.  Listinsert(sqlist *&l,int I,elemtype e):在顺序表l中第i个位置上插入元数e.

9.  Listdelete(sqlist *&l,int I,elemtype &e):顺序表l中删除第i个元数。

具体代码实现和结果如下:

 

#include<stdio.h>

#include<malloc.h>

#define maxsize 50

typedef char elemtype;

typedef struct

{elemtype elem[maxsize];

int length;

}sqlist;//顺序表类型定义

 

void initlist(sqlist *&l) //初始化顺序表l

{

       l=(sqlist * )malloc(sizeof(sqlist));

       l->length=0;

}

 

void destroylist(sqlist *l)//释放顺序表l

{

       free(l);

}

 

int listempty(sqlist *l)//判断顺序表l是否为空表

{

       return(l->length==0);

}

 

int listlength(sqlist *l)//返回顺序表l的元数个数

{

       return(l->length);

}

 

void displist(sqlist *l)//获取顺序表l中第i个元数

{

       int i;

       if(listempty(l))return;

       for(i=0;i<l->length;i++)

              printf("%c",l->elem[i]);

       printf("/n");

}

 

int getelem(sqlist *l,int i,elemtype &e)//在顺序表中查找第i个元数

{

       if(i<1||i>l->length)

              return 0;

       e=l->elem[i-1];

       return 1;

}

 

int locateelem(sqlist *l,elemtype e)//查找元数e

{

       int i=0;

       while(i<l->length&&l->elem[i]!=e)

              i++;

       if(i>=l->length)

              return 0;

       else

              return i+1;

}

 

int listinsert(sqlist *l,int i,elemtype e)

//在第i个位置上插入元数e

{

       int j;

       if(i<1||i>l->length+1)

              return 0;

       i--;//将顺序表位序转化为elem下标

       for(j=l->length;j>i;j--)//elem[i]及后面元数后移一个位置

              l->elem[j]=l->elem[j-1];

       l->elem[i]=e;

       l->length++;//顺序表长度增1

       return 1;

}

 

int listdelete(sqlist *&l,int i,elemtype &e)

//顺序表l中删除第i个元数

{

       int j;

       if(i<1||i>l->length)

              return 0;

       i--;//将顺序表位序转化为elem下标

       e=l->elem[i];

       for(j=i;j<l->length-1;j++)

              l->elem[j]=l->elem[j+1];

       l->length-1;

       return 1;

}

 

 

void main()

{

       sqlist *l;

       elemtype e;

       printf("(1)初始化顺序表l/n");

       initlist(l);

       printf("(2)依次采用尾插法插入a,b,c,d,e元素/n");

       listinsert(l,1,'a');

       listinsert(l,2,'b');

       listinsert(l,3,'c');

       listinsert(l,4,'d');

       listinsert(l,5,'e');

       printf("(3)输出顺序表l:");

       displist(l);

       printf("(4)顺序表l长度=%d/n",listlength(l));

       printf("(5)顺序表l%s/n",(listempty(l)?"":"非空"));

       getelem(l,3,e);

       printf("(6)顺序表l的第3个元数=%c/n",e);

       printf("(7)元数a的位置=%d/n",locateelem(l,'a'));

       printf("(8)在第4个元数的位置上插入f元数/n");

       listinsert(l,4,'f');

       printf("(9)输出顺序表l:");

       displist(l);

       printf("(10)删除l的第3个元数/n");

       listdelete(l,3,e);

       printf("(11)输出顺序表l:");

       displist(l);

       printf("(12)释放顺序表l/n");

       destroylist(l);

}

 

原创粉丝点击