1.线性表的定义
线性表是具有相同特性的数据元素的一个有限序列。
2.1线性表的顺序存储结构-----------顺序表
线性表的顺序存储结构是,把线性表的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一段连续的存储空间中。
在定义一个 在定义一个线性表的顺序存储类型时,除了定义一个数组来存储线性表中的元素外,还需要定义一个整形变量来存储线性表的实际长度。假定数组用data【Maxsize】表示,长度对应的整型变量用Length表示,则采用结构体类型来表示,元素类型为通用类型标识(zhi)符ElemType的线性表的顺序存储类型
可描述如下:
typedef struct
{
ElemType data[MaxSize]; //存放顺序表中的元素
int length; //存放顺序表的长度
}SqList; //顺序表的类型定义
注意:#define MaxSize 50 是表示估计线性表不会超过50个元素。
2.2线性表基本运算的实现
为了简单,假设ElemType为int类型,使用如下自定义类型语句。
typedef int ElemType;
1. 建立顺序表
顺序表指针和顺序表Q都可以提供一个顺序表,但前者是通过指针L间接地提供顺序表,其定义方式为SqList * L;后者是直接提供顺序表,其定义方式为SqList Q.前者引用length的方式是L->Length,后者引用Length域的方式是Q.length.(采用顺序表指针,主要是为了方便顺序表的释放算法设计)
void CreateList(SqList *&L,ElemType a[],int n) //由a中的n个元素建立顺序表
{
int i;
L =(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间
for(i=0;i<n;i++) //放置数据元素
L->data[i] = a[i];
L->length = n; //设置长度
}
例题 顺序表中 删除多余重复元素
#include <stdio.h>
#include <stdlib.h>
#define size 100
typedef struct
{
int data[size];
int last;
}Sequenlist;
Sequenlist *SequenlistSet()
{
Sequenlist *L;
int n;
L=(Sequenlist *)malloc(sizeof(Sequenlist));
L->last=-1;
printf("请输入表长:\n");
scanf("%d",&n);
if(n<0)
{
printf("错误!\n");
return(0);
}
printf("请输入元素:\n");
for(L->last=0;L->last<n;L->last++)
scanf("%d",&L->data[L->last]);
return L;
}
void SequenlistDelete(Sequenlist *L,int x)
{
int i=0;
int length=L->last;
for(i=x;i<length-1;i++)
L->data[i]=L->data[i+1];
L->last--;
}
void search(Sequenlist *L)
{
int i=0,j=0;
int length=L->last;
for(i=0;i<length;i++)
{
for(j=i+1;j<length;j++)
if(L->data[i]==L->data[j])
{
SequenlistDelete(L,j);
j--;
length--;
}
}
}
void print(Sequenlist *L)
{
int i=0;
int length=L->last;
for(i=0;i<length;i++)
printf("%d ",L->data[i]);
printf("\n");
}
void main()
{
Sequenlist *L;
L=SequenlistSet();
search(L);
print(L);
}