您的位置:首页 > 其它

线性表的顺序表示——顺序表

2015-06-09 21:08 295 查看
顺序表示(存储):

指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称其为顺序表。

在实现的过程中一般用数组来表述顺序存储。表示如下

#define MAXSIZE 100

typedef int Elemtype;

typedef struct sqlist

{

Elemtype a[MAXSIZE];

int length;

}sqlist;

1,顺序表的初始化

顺序表的初始化是指把表的长度设为0,通过控制结构体里的length的值来实现,代码如下:

void initial(sqlist* L)
//这里要注意参数传递的方式是按指针传后按引用传

{

L->length = 0;

}

2,顺序表的创建

顺序表的创建首先是给结构体里的length赋上一个值,即顺序表的长度。然后在依次输入表中的各个数据。代码如下:

void creat(sqlist* L)//同样是按指针或引用传,另外参数传递的方式要与后面调用结构体里的元素的形
式一致,指针L->(),引用L.()

{

int n,i;

printf("请输入表长:");

scanf("%d",&n);

L->length = n;

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

{

printf("请输入第%d个元素:",i+1);

scanf("%d",&L->a[i]);

}

}

3,顺序表的插入

顺序表的插入是指在已经给出的顺序表上插入一个元素。在插入元素时有两种插入方式:

一种是插入到顺序表中的第几个元素之前,这时需要表长加一且从该表中最后一个元素开始到该元素,每个元素往后移动一位。(a[i]
= a[i+1],从最后一个开始的原因是避免元素被重复赋值),再要插入的数据赋给指定位置的元素;另外也要注意偏移量对插入操作的影响。代码如下:

void
insert_1(sqlist* L)

{

int i,k,num;

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

scanf("%d",&k);

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

scanf("%d",&num);

L->length++;

for(i = L->length-1;i >= k-1;i--)//注意偏移量的影响

{

L->a[i+1] = L->a[i];

}

L->a[k-1] = num;

}

另一种插入操作是插入到指定的元素前(前提是顺序表中有该元素)。方法是先统计该元素的下标,再按第一种方法进行插入。代码如下:

void insert_2(sqlist* L)

{

int a,num,k,i;

printf("请输入要插在哪个元素前面:");

scanf("%d",&a);

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

{

if(a == L->a[i])

{

k = i;

}

}

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

scanf("%d",&num);

L->length++;

for(i = L->length-1;i >= k;i--)//两种方法在处理偏移的方法略有不同

{

L->a[i+1] = L->a[i];

}

L->a[k] = num;

}

4,顺序表的删除

在顺序表中删除指定的元素,也有两种方法,按下标删除或者按指定值删除。操作与插入类似,只是数据移动的方向相反,同样要注意偏移量。代码如下:

方法一:

void
delete_1(sqlist* L)

{

int k,i;

printf("请输入删除元素的位置:");

scanf("%d",&k);

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

{

L->a[i] = L->a[i+1];

}

L->length--;

}

方法二:

void delete_2(sqlist* L)

{

int num,k,i;

printf("请输入要删除的元素:");

scanf("%d",&num);

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

{

if(L->a[i] == num)

{

k = i;

}

}

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

{

L->a[i] = L->a[i+1];

}

L->length--;

}

5,顺序表的查找

查找操作比较简单,代码如下:

void
locate(sqlist L)

{

int num,i;

printf("请输入要查找的元素:");

scanf("%d",&num);

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

{

if(L.a[i] == num)

{

printf("你查找的元素为:%d\n",L.a[i]);

break;

}

}

}

6,顺序表的输出

代码如下:

void
output(sqlist L)

{

int i;

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

{

printf("NO.%d : %d\n",i+1,L.a[i]);

}

}

最后附上能够运行的代码:

#include<stdio.h>

#define MAXSIZE 100

typedef int Elemtype;

typedef struct

{

Elemtype a[MAXSIZE];

int length;

}sqlist;

void initial(sqlist* L)

{

L->length = 0;

}

void creat(sqlist* L)

{

int n,i;

printf("请输入表长:");

scanf("%d",&n);

L->length = n;

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

{

printf("请输入第%d个元素:",i+1);

scanf("%d",&L->a[i]);

}

}

void output(sqlist L)

{

int i;

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

{

printf("NO.%d : %d\n",i+1,L.a[i]);

}

}

void insert_1(sqlist* L)

{

int i,k,num;

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

scanf("%d",&k);

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

scanf("%d",&num);

L->length++;

for(i = L->length-1;i >= k-1;i--)

{

L->a[i+1] = L->a[i];

}

L->a[k-1] = num;

}

void insert_2(sqlist* L)

{

int a,num,k,i;

printf("请输入要插在哪个元素前面:");

scanf("%d",&a);

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

{

if(a == L->a[i])

{

k = i;

}

}

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

scanf("%d",&num);

L->length++;

for(i = L->length-1;i >= k;i--)

{

L->a[i+1] = L->a[i];

}

L->a[k] = num;

}

void delete_1(sqlist* L)

{

int k,i;

printf("请输入删除元素的位置:");

scanf("%d",&k);

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

{

L->a[i] = L->a[i+1];

}

L->length--;

}

void delete_2(sqlist* L)

{

int num,k,i;

printf("请输入要删除的元素:");

scanf("%d",&num);

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

{

if(L->a[i] == num)

{

k = i;

}

}

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

{

L->a[i] = L->a[i+1];

}

L->length--;

}

void locate(sqlist L)

{

int num,i;

printf("请输入要查找的元素:");

scanf("%d",&num);

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

{

if(L.a[i] == num)

{

printf("你查找的元素为:%d\n",L.a[i]);

break;

}

}

}

int main()

{

sqlist L;

initial(&L);

creat(&L);output(L);

insert_1(&L);output(L);

insert_2(&L);output(L);

delete_1(&L);output(L);

delete_2(&L);output(L);

locate(L);

return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: