由于本人在学习秦锋版本的算法与数据结构中发现书中的知识较为零碎,难以理解,所以本人便整理归纳书中关于线性表的顺序存储结构的所有知识点,帮助同学们一起学习。
线性表的顺序存储简介
线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表在逻辑结构上相邻的元素存储在连续的物理存储单元中,即:通过数据元素物理存储的连续性来反应元素之间逻辑上的相邻关系。采用顺序存储结构存储的线性表通常简称为顺序表。
顺序存储的线性表的特点:
◆ 线性表的逻辑顺序与物理顺序一致;
◆ 数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现。顺序表的查找,插入,删除,求表长以及遍历的完整代码
#include
#include
#include
#include
#define maxsize 100
typedef int datatype;
typedef struct node
{
datatype data[maxsize];
int length;
}seqlist,*pseqlist;
//创建表
void Creat_seqlist(pseqlist &p,datatype a[],int n)
{
p=(pseqlist)malloc(sizeof(seqlist));
for(int i=0;i<n;i++)
p->data[i]=a[i];
p->length=n;
}
//判断顺序表是否为空
bool Empty_seqlist(pseqlist p)
{
return (p->length==0);
}
//显示原表
Display_seqlist(pseqlist p)
{
if(Empty_seqlist(p))
return 0;
for(int i=0;i<p->length;i++)
printf("%d ",p->data[i]);
printf("\n");
}
//求表的长度
int length_seqlist(pseqlist p)
{
return (p->length);
}
//查找元素
int check_seqlist(pseqlist p,datatype x)
{
int i=0;
while(i<p->length && p->data[i]!=x)
i++;
if(i>=p->length)return 0;
return i+1;
}
// 顺序表的插入
Insert_seqlist(pseqlist p,datatype m,int n,datatype data[])
{
int i;
if(!p)
{
printf("表不存在");
return -1;
}
if(p->length>=maxsize)
{
printf("表溢出");
return -1;
}
if(n<1 || n>p->length+1)
{
printf("插入位置不合法");
return 0;
}
for(i=p->length;i>n-1;i--)
p->data[i]=p->data[i-1];
p->data[n-1]=m;
p->length++;
}
//顺序表的删除
delete_seqlist(pseqlist p,int n,datatype data[])
{
int i;
if(!p)
{
printf("表不存在");
}
if(n<1 || n>p->length)
{
printf("删除的位置不合法");
}
for(i=n;i<p->length;i++)
p->data[i-1]=p->data[i];
p->length--;
for(i=0;i<p->length;i++)
data[i]=p->data[i];
}
//主函数
main()
{
pseqlist l;
int c;//需要查找的元素
int i;// 插入元素的位置
int q;// 插入的元素
int del;
datatype x[1000]={1,3,5,8,9,10};
int z,d;
//创建表
Creat_seqlist(l,x,6);
printf("***************单链表知识综合***********\n");
printf(" 1:显示原表\n");
printf(" 2:查询表的长度\n");
printf(" 3:查找元素\n");
printf(" 4:插入元素\n");
printf(" 5:删除元素\n");
printf(" 6:退出程序\n");
int a;//输入选项的变量
while(1)
{
printf("您选择得是:");
scanf("%d",&a);
printf("\n");
if(a==6)
{
printf("谢谢使用,退出程序\n");
break;
}
switch(a)
{
case 1:
Display_seqlist(l);
break;
printf("\n");
case 2:
printf("表长度:%d\n", length_seqlist(l));
break;
case 3:
printf("请输入需要查找的元素:");
scanf("%d",&c);
printf("\n");
printf("您需要查找的元素:%d",c);
if((loc=check_seqlist(l, c))>0 )
printf("找到了,值为%d的元素是第 %d 个\n", c,loc);
else
printf("值为%d的元素木有找到!\n",c);
break;
case 4:
printf("请输入插入的元素及其位置\n");
scanf("%d %d",&i,&q);
printf("\n");
Insert_seqlist(l,q,i,x);
for(z=0;z<l->length;z++)
printf("%d ",l->data[z]);
printf("\n");
break;
case 5:
printf("请输入需要删除的位置:");
scanf("%d-1",&del);
printf("\n");
delete_seqlist(l,del,x);
for(d=0;d<l->length;d++)
printf("%d ",l->data[d]);
printf("\n");
break;
default:printf("\n 您输入的数字有误\n");
}
}
return 0;
}
``