您的位置:首页 > 其它

线性表的顺序存储

2015-09-24 19:24 441 查看
线性表是n个类型相同数据元素的有限序列,对n>0,除第一个元素无直接前驱,最后一个元素没有直接后继外,其他都是每个元素有一个直接前驱和直接后继,而且是一对一的关系。

线性表:顺序存储,链式存储。

(1) 按内容查找:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define OK   1
#define ERROR  0
#define TRUE 1
#define FALSE 0
#define ElemType int
#define	MAXSIZE  100   /*此处的宏定义常量表示线性表可能达到的最大长度*/
typedef  struct
{
ElemType  elem[MAXSIZE];  /*线性表占用的数组空间*/
int       last;    /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/
}SeqList;

int  Locate(SeqList L, ElemType e)
{
int i=0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
while ((i<=L.last)&&(L.elem[i]!=e))		/*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/
i++;
if  (i<=L.last)
return(i+1);  /*若找到值为e的元素,则返回其序号*/
else
return(-1);  /*若没找到,则返回空序号*/
}

void main()
{
SeqList l;
int p,q,r;
int i;
printf("请输入线性表的长度:");
scanf("%d",&r);
l.last = r-1;
printf("请输入线性表的各元素值:\n");
for(i=0; i<=l.last; i++)
{
scanf("%d",&l.elem[i]);
}
printf("请输入要查找的元素值:\n");
scanf("%d",&q);
p=Locate(l,q);
if(p == -1)
printf("在此线性表中没有该元素!\n");
else
printf("该元素在线性表中的位置为:%d\n",p);
}
(2)插入操作:

将原表中位置n,n-1...i..上的结点,依次后移到位置n+1,n,n-1...i...的位置。空出i的位置,将元素e插入。

#define OK 1
#define ERROR 0
int InsList(SeqList *L,ElenType e)
{
int k;
if((i<1)||(i>L->Last+2))
{
printf("不合法!\n");
return (ERROR);
}
if(L->Last>=MAXSIZE-1)
{
printf("表满!\n");
return (ERROR);
}
for(k=L->Last;k>=i-1;k--)
{
L->elem[k+1]=L->elem[k];//后一一个位置
L->elem[i-1]=e;//将e插入
L->last++;
return(Ok);
}
}
(3)删除操作:

将原表中位置i+1,i+2..n上的结点,依次前移到位置i,i+1...n的位置,将元素e删除。

int DellList(SeqList *L,int i,ElemType *e)
{
int k;
if(i<1|| i>L->last+1)
{
printf("错误!\n");
return(ERROR);
}
*e=L->elem[i-1];
for(k=i;i<=L->last;k++)
L->elem[k-1]=L->elem[k];
L->last--;
return (OK);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: