定义
线性表是n(0)个元素a0,a1,…,an-1 的线性序列,记为: (a0,a1,…,an-1)。其中n是线性表中元素的个数,称为线性表的长度;n=0时称为空表。 ai是表中下标为i的元素(i=0,1,…,n-1),称ai是ai+1的直接前驱元素,ai+1是ai的直接后继元素。 线性表是动态数据结构,它的表长可以改变。
线性表ADT
ADT LinearList {
数据:
0个或多个元素的线性序列(a0,a1,...,an-1),其最大允许长度为MaxListSize。
运算:
Create(): 创建一个空线性表。
Destroy():撤消一个线性表。
IsEmpty():若线性表空,则返回true;否则返回false。
Length(): 返回表中元素个数。
Find(i,x):在x中返回表中下标为i的元素ai。若不存在,则返回false,否则返回true。
Search(x):若x不在表中,则返回-1,否则返回x在表中的下标。
Insert(i,x):在元素ai之后插入x。若i=-1,则x插在第一个元素a0前。若插入成功,则返回true,否则返回false。
Delete(i):删除元素ai。若删除成功,则返回true,否则返回false。
Update(i,x):将元素ai的值修改为x。若修改成功,则返回true,否则返回false。
Output(out):把表送至输出流
} // 插入x到表:(a0,a1,...,an-1)
#include "stdio.h"
#ifndef ElemType
#define ElemType int
/*typedef int ElemType;*/ /*在实际应用中,将ElemType定义成实际类型*/
#endif
#ifndef SQ_List /*或 #if !defined(SQList)*/
#define SQ_List
#define MaxLen 100 /*线性表的容量,线性表存储元素个数*/
typedef struct{
ElemType data[MaxLen],x; /*定义存储表中元素的数组*/
int Length; /*线性表的实际长度*/
}sqList;
void InitList(sqList *L){L->Length=0;}/*初始化线性表*/
int GetLen(sqList *L){return L->Length;}/*求线性表长度*/
ElemType &GetElem(sqList *L,int i)/*求线性表第i个元素的值,i=1~n*/
{if(i<1||i>L->Length)return L->x; /*若元素值不可为0时*/
return L->data[i-1];}
int Locate(sqList *L,ElemType x)/*查找值为x元素的位置(1~n),没找到返回0*/
{int i;
for(i=0;i<L->Length;i++){if(L->data[i]==x)return i+1;}
return 0;}
int InsElem(sqList *L,int i,ElemType x)/*第i位置插入元素x,i=1~n*/
{int j;
if(L->Length==MaxLen)return 0;/*表已满*/
if(i<1||i>L->Length+1)return 0;/*插入位置出错*/
/*//if(i<1)i=1;if(i>L->Length+1)i=L->Length+1;*/
for(j=L->Length;j>=i;j--)L->data[j]=L->data[j-1];/*第i~n个元素后移1位*/
L->data[i-1]=x; /*第i位置插入x*/
L->Length++; /*表长度加1 */
return 1;
}
int DelElem(sqList *L,int i)/*删除线性表中第i个位置上的元素*/
{int j;
if(i<1||i>L->Length)return 0;/*检查删除位置的合法性{printf("不存在第i个元素");}*/
for(j=i;j<=L->Length-1;j++)
L->data[j-1]=L->data[j]; /*第i~n个元素向前移动1位*/
L->Length--;return 1;
}
void DispList(sqList *L)/*顺序表元素输出*/
{int i;
if(L->Length==0){printf("空表\n");return;}
for(i=0;i<=L->Length-1;i++)
printf("%d,",L->data[i]); /*第i~n个元素向前移动1位*/
printf("\n");
}
#endif
#include "stdio.h"
#ifndef ElemType
#define ElemType int
/*typedef int ElemType;*/ /*在实际应用中,将ElemType定义成实际类型*/
#endif
#ifndef SQ_List /*或 #if !defined(SQList)*/
#define SQ_List
#define MaxLen 100 /*线性表的容量,线性表存储元素个数*/
typedef struct{
ElemType data[MaxLen],x; /*定义存储表中元素的数组*/
int Length; /*线性表的实际长度*/
}sqList;
void InitList(sqList *L){L->Length=0;}/*初始化线性表*/
int GetLen(sqList *L){return L->Length;}/*求线性表长度*/
ElemType &GetElem(sqList *L,int i)/*求线性表第i个元素的值,i=1~n*/
{if(i<1||i>L->Length)return L->x; /*若元素值不可为0时*/
return L->data[i-1];}
int Locate(sqList *L,ElemType x)/*查找值为x元素的位置(1~n),没找到返回0*/
{int i;
for(i=0;i<L->Length;i++){if(L->data[i]==x)return i+1;}
return 0;}
int InsElem(sqList *L,int i,ElemType x)/*第i位置插入元素x,i=1~n*/
{int j;
if(L->Length==MaxLen)return 0;/*表已满*/
if(i<1||i>L->Length+1)return 0;/*插入位置出错*/
/*//if(i<1)i=1;if(i>L->Length+1)i=L->Length+1;*/
for(j=L->Length;j>=i;j--)L->data[j]=L->data[j-1];/*第i~n个元素后移1位*/
L->data[i-1]=x; /*第i位置插入x*/
L->Length++; /*表长度加1 */
return 1;
}
int DelElem(sqList *L,int i)/*删除线性表中第i个位置上的元素*/
{int j;
if(i<1||i>L->Length)return 0;/*检查删除位置的合法性{printf("不存在第i个元素");}*/
for(j=i;j<=L->Length-1;j++)
L->data[j-1]=L->data[j]; /*第i~n个元素向前移动1位*/
L->Length--;return 1;
}
void DispList(sqList *L)/*顺序表元素输出*/
{int i;
if(L->Length==0){printf("空表\n");return;}
for(i=0;i<=L->Length-1;i++)
printf("%d,",L->data[i]); /*第i~n个元素向前移动1位*/
printf("\n");
}
#endif