线性表
定义:线性表是具有相同数据类型的n个数据元素的有限序列。其中n为表长,当n=0时,线性表为空表。
特点:
1.表中的元素个数有限。
2.表中的元素具有逻辑上的顺序性,表示元素的先后顺序。
3.除了第一个元素外,每个元素有且仅有一个直接前驱;除了最后一个元素外,每个元素有且仅有一个直接后驱。
4.每个元素的数据类型相同。
5.仅讨论元素间的逻辑关系,不考虑元素是什么具体内容。
线性表基本操作
- InitList(&L) 初始化表
- Length(L) 求表长
- LocateElem(L,e) 按值查找
- GetElem(L,i) 按位找值
- ListInsert(&L,i,e) 插入操作
- ListDelete(&L,i,&e) 删除操作
- PrintList(L) 输出操作
- Empty(L) 判空操作
- DestoryList(&L) 销毁操作
线性表的顺序表示——顺序表
特点:1.顺序表中元素的逻辑顺序和物理顺序相同。2.表中任一元素都可以随机存储。
实现:
#include<stdio.h>
#include<stdlib.h>
#define Size 10
typedef struct{
int *head;
int MaxSize;
int length;
}seqList;
void initList(seqList &L){
L.head=(int*)malloc(Size*sizeof(int));
if(!L.head){
printf("动态分配内存失败");
exit(0);
}
L.MaxSize=Size;
L.length=0;
}
void input(seqList &L){
for(int i=0;i<L.MaxSize;i++){
L.head[i]=rand()%100;
L.length++;
}
}
void display(seqList L){
for(int i=0;i<L.length;i++){
printf("%d\n",L.head[i]);
}
}
int Length(seqList L){
return L.length;
}
void ListInsert(seqList &L,int pos,int e){
if(pos<1||pos>L.length+1){
printf("插入位置不合理,插入失败");
}
if(L.length>=L.MaxSize){
L.head=(int*)realloc(L.head,(L.MaxSize+1)*sizeof(int));
}
for(int i=L.length;i>=pos;i--){
L.head[i]=L.head[i-1];
}
L.head[pos-1]=e;
L.length++;
}
void ListDelete(seqList &L,int pos,int &e){
if(pos<1||pos>L.length+1){
printf("删除位置不合理,删除失败");
}
e=L.head[pos-1];
for(int i=pos;i<L.length;i++){
L.head[i-1]=L.head[i];
}
L.length--;
}
int LocateElem(seqList L,int e){
for(int i=0;i<L.length;i++){
if(L.head[i]==e){
return i+1;
}
}
}
bool Empty(seqList L){
if(L.length==0){
return true;
}
return false;