您的位置:首页 > 其它

顺序表

2016-03-15 17:47 337 查看
顺序表:线性数据元素存储到一个连续的存储空间中,比如数组

顺序表的实现

“sqList.h”

#ifndef SQLIST_H_
#define SQLIST_H_
#include <stdio.h>
#define MAX 1024

typedef struct
{
int data[MAX];
int last;// 含有数组元素个数的下标,比如数组
}sqList,*sqLink;

void CreateList(sqLink L);  // 创建空表
int EmptyList(sqLink L);    // 判空表
void ClearList(sqLink L);   //置空表
int GetList(sqLink L, int no);  // 取表元素(根据no)
int InsertList(sqLink L, int data, int no); // 插入元素
int DelList(sqLink L, int no);  // 删除元素(根据no)
int LocateList(sqLink L, int data); // 定位元素
void PrintList(sqLink L);   // 打印表数据
int LengthList(sqLink L);   // 求取表长度
#endif;


“sqList.cpp”

#include "sqList.h"

// 创建空表,
void CreateList(sqLink L)
{
int temp = 1;
int tempdata = 0;
do
{
printf("请输入第%d个元素:", tempdata);
scanf("%d", &tempdata);
if (tempdata != -1)
{
L->data[temp-1] = tempdata;
L->last = temp - 1;
temp++;
}
}while(temp <= MAX && tempdata!= -1);
}

// 判空表
int EmptyList(sqLink L)
{
if (L->last == -1)
return -1;
else
return 0;
}

//置空表
void ClearList(sqLink L)
{
L->last = -1;
}

// 取表元素(根据no)
int GetList(sqLink L, int no)
{
if (no < 0 || no >= L->last+1)
return -1;

return L->data[no-1];
}

// 打印表数据
void PrintList(sqLink L)
{
int i;
for (i = 0; i < LengthList(L); i++)
{
printf("%d ", L->data[i]);
}
printf("\n");
}

// 求取表长度
int LengthList(sqLink L)
{
return L->last+1;
}

int InsertList(sqLink L, int data, int no)  // 插入元素
{
int j;
if (L->last >= MAX-1)
{
printf("没有空闲空间!\n");
return -1;
}
else if (no < 0 || no > L->last +1)
{
printf("插入位置不存在!\n");
return -1;
}else{
for (j = L->last; j >= no; j--)
{
L->data[j+1] = L->data[j];
}

L->data[no] = data;
L->last++;
return 0;
}

return 0;
}

// 删除元素(根据no)
int DelList(sqLink L, int no)
{
int j;
if (no < 0 || no > L->last+1)
{
printf("删除位置不存在!\n");
return -1;
}
else
{
for (j = no+1; j <= L->last+1; j++)
{
L->data[j-1] = L->data[j];
}
L->last--;
return 0;
}
}

// 定位元素,第一个为data数据
int LocateList(sqLink L, int data)
{
int i = 0;
while (i <= L->last && L->data[i] != data)
i++;
if (i <= L->last) return (i);
else
return -1;
}


“main.cpp”

int main()
{
sqLink L = (sqLink)malloc(sizeof(sqList));
CreateList(L);
PrintList(L);
return 0;
}


线性表的顺序存储结构有存储密度高及能够随机存取等优点,但存在不足:

1.插入、删除等运算耗时,且存在元素在存储器中成片移动的现象

2.要求系统提供一片较大的连续存储空间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: