1.定义
线性表的顺序存储称为顺序表。元素间逻辑关系相邻,内存地址相邻;支持随机访问,可以通过下标访问表中每一个元素。
2.结构定义
#define MaxSize 50
typedef struct {
int data[MaxSize];
int length;
}Sqlist;
3.相关算法
1)顺序表创建
void creat(Sqlist &L)
{
int a;
printf("线性表元素总数:\n");
scanf("%d",&a);
printf("依次输入每个元素\n");
for(int i=0;i<a;i++)
{
scanf("%d",&L.data[i]);
L.length++;
}
}
2)指定位置插入元素
int insert(Sqlist &L,int i , int e){//在某个位置插入一个元素(成功返回1,失败返回0)
if(i<1||i>L.length+1)//如果插入位置小于1或者大于表长+1,则位置不合法
return 0;
else if(i>=MaxSize)//如果位置大于等于最大表长,则不可插入
return 0;
else if (i== L.length+1)
{
L.data[L.length] = e;
L.length ++;
return 1;
}
else {
for(int j = L.length;j>=i;j--)//将插入位置后的所有元素后移
{
L.data[j]=L.data[j-1];//这里需注意,数组下标是从0开始的
L.data[i-1] = e;
}
L.length++;//表长+1
return 1;
}
}
3)删除指定位置元素
int listdelete(Sqlist &L, int i , int &e){//成功返回1失败返回0
if(i<1||i>L.length)//如果删除位置小于1或者大于表长,则位置不合法
return 0;
e = L.data[i-1];
for(int j = i; j<L.length; j++)//删除位之后所有元素前移
L.data[j-1] = L.data[j];
L.length--;//表长-1
return 1;
}
4)按值查找
int find(Sqlist L,int e){
int i;
for (i = 0; i < L.length; i++)
{
if(e==L.data[i])
{
return i+1;
}
else
{
return 0;
}
}
}
4.完整代码
#include <stdio.h>
#include <stdlib.h>
//顺序表定义
#define MaxSize 50
typedef struct {
int data[MaxSize];
int length;
}Sqlist;
//先声明函数
void creat(Sqlist &L);//建立线性表
void show(Sqlist L);//显示线性表
//在指定位置插入数据
int insert(Sqlist &L,int i , int e){//在某个位置插入一个元素(成功返回1,失败返回0)
if(i<1||i>L.length+1)//如果插入位置小于1或者大于表长+1,则位置不合法
return 0;
else if(i>=MaxSize)//如果位置大于等于最大表长,则不可插入
return 0;
else if (i== L.length+1)
{
L.data[L.length] = e;
L.length ++;
return 1;
}
else {
for(int j = L.length;j>=i;j--)//将插入位置后的所有元素后移
{
L.data[j]=L.data[j-1];//这里需注意,数组下标是从0开始的
L.data[i-1] = e;
}
L.length++;//表长+1
return 1;
}
}
//删除指定位置元素
int listdelete(Sqlist &L, int i , int &e){//成功返回1失败返回0
if(i<1||i>L.length)//如果删除位置小于1或者大于表长,则位置不合法
return 0;
e = L.data[i-1];
for(int j = i; j<L.length; j++)//删除位之后所有元素前移
L.data[j-1] = L.data[j];
L.length--;//表长-1
return 1;
}
//按值查找成功返回位序,失败返回0
int find(Sqlist L,int e){
int i;
for (i = 0; i < L.length; i++)
{
if(e==L.data[i])
{
return i+1;
}
else
{
return 0;
}
}
}
int main()
{
Sqlist L;
L.length=0;//初始化线性表
creat(L);//创建线性表
/*
printf("在顺序表哪个位置插入元素:\n");
int i,e;
scanf("%d",&i);
printf("插入元素值:\n");
scanf("%d",&e);
int j = insert(L,i,e);
if(j == 1)
{
printf("插入成功\n");
show(L);//打印线性表元素
}
else
{
printf("插入失败\n");
}
printf("删除第几个位置的数\n");
int h,k;
scanf("%d",&h);
int temp = listdelete(L, h , k);
if(temp == 1)
{
printf("成功\n");
show(L);//打印线性表元素
}
else
{
printf("失败\n");
}
*/
//按值查找
int e,temp;
printf("想查找的值:\n");
scanf("%d",&e);
temp = find(L,e);
if (temp == 0)
{
printf("失败\n");
}
else
{
printf("成功\n");
printf("该元素位序为%d\n",temp);
}
return 0;
}
//创建
void creat(Sqlist &L)
{
int a;
printf("线性表元素总数:\n");
scanf("%d",&a);
printf("依次输入每个元素\n");
for(int i=0;i<a;i++)
{
scanf("%d",&L.data[i]);
L.length++;
}
}
//打印
void show(Sqlist L)
{
int i;
printf("当前元素:\n");
for(i=0;i<L.length;i++)
printf("%d\t",L.data[i]);
printf("\n");
}
5.小结
顺序表是最基本及简单的一种数据结构,优点明显(随机访问,算法简单)但缺点很突出,不利于内存优化,不利于动态处理,对于一些对内存要求很高的算法以及动态处理很不适用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。