文章目录
目录
线性表的定义
线性表(List): 零个或者多个数据元素的有限序列
注意: 序列说明元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有,且只有一个前驱和后继,是有限的,事实上,计算机处理的对象都是有限的
线性表抽象数据结构定义
前面给出了线性表的定义,现在分析一下线性表应该有哪些操作:
首先线性表中的元素类型都是一样的,对表进行操作那首先得创建表, 没有元素就是空表,然后往里边填数据元素-初始化, 有些数据需要查找,有些不合适需要删除,也可以往里边增加数据。
本文主要介绍了顺序存储结构的算法,希望能对初步学习数据结构算法的你们有所帮助
#include<stdio.h>//线性表的顺序存储结构
#include<stdlib.h>
#include<iostream>
#define LISTINITISIZE 20
#define LISTINCREMENT 5
typedef struct
{
int *elem;
int length;
int Listsize;
}SeqList;
int InitList(SeqList *L)//顺序表的初始化算法,LnitList为函数的返回类型
{
L->elem=(int *)malloc(sizeof(int)*20);
if(!(L->elem))
return 0;
L->length=0;
L->Listsize=20;
return 1;
}
int InsertEIem(SeqList *L,int i,int e)//顺序表的插入算法(插入表的值会发生变化)
{
int j,newsize;
int *newbase;
if(i<1||i>L->length+1)
return 0;
if(L->length>=L->Listsize)
{
newsize=(L->Listsize+5)*sizeof(int);
newbase=(int *)realloc(L->elem,newsize);
if(!(newbase))
return 0;
L->elem=newbase;
L->Listsize+=5;
}
for(j=L->length-1;j>i-1;j++)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;
L->length++;
return 1;
}
void PrintList(SeqList L)//打印顺序表信息操作(只传值)
{
int i;
printf("表的存储空间大小:%d.\n",L.Listsize);
printf("表中共有元素%d个,各个元素是:\n",L.length);
for(i=0;i<=L.length-1;i++)
{
printf("%d\t",L.elem[i]);
}
printf("\n");
}
int DeleteElem(SeqList *L,int i,int *e)//顺序表的删除算法,e表示元素名称,*e将删除的元素代入主程序,值传递单向,址传递双向
{
int j;
if((i<=0)||(i>L->length))//移动了n-i个元素
return 0;
*e=L->elem[i-1];
for(j=i;j<=L->length-1;j++)
{
L->elem[j-1]=L->elem[j];
}
L->length--;
return 1;
}
int LocateElem(SeqList L,int e)//顺序表中数据元素的定位算法(不改变元素)
{
int i;
for(i=0;i<=L.length-1;i++)
if(L.elem[i]==e)
{
return i+1;
}
return 0;
}
int GetElem(SeqList L,int i,int *e)//顺序表中的取元素操作(抽取指定元素)
{
if(i<1||i>L.length)
return 0;
*e=L.elem[i-1];//将值带回
return 1;
}
int PriorElem(SeqList L,int e,int *pre_e)//顺序表中求元素前驱结点操作*pre_e址引用代回来
{
int i;
for(i=L.length-1;i>=1;i--)//找到e前面的一个节点
{
if(e==L.elem[i])
{
*pre_e=L.elem[i-1];
return 1;
}
}
return 0;
}
int main ()
{
int e,pre_e,next_e,j,n,m,h;
int a[10]={12,22,34,54,3,67,27,35,46,37};
SeqList L;
InitList(&L);
for(j=0;j<10;j++)
{
InsertEIem(&L,j+1,a[j]);
}
PrintList(L);
m=DeleteElem(&L,4,&e);
if (m==0)
printf("error\n");
else
printf("e=%d\n",e);
PrintList(L);
printf("\n");
printf("enter you find number n:");
scanf("%d",&n);
n=LocateElem(L,n);
if(n==0)
printf("not found!\n");
else
printf("The location of the number is %d\n",n);
printf("enter you collect elememt n:");
scanf("%d",&n);
h=GetElem(L,n,&e);
if(h==0)
printf("not found!\n");
else
printf("you collect element is %d\n",h);
return 0;
}
写在最后,希望对与初学者的你有所帮助。