2.2 线性表的顺序实现
假定线性表的元素类型为ElemType
静态分配的顺序表存储结构
cpp
#define MaxSize 50
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
动态分配的顺序表存储结构
cpp
#define InitSize 100
typedef struct{
ElemType *data;
int MaxSize,length;
}SeqList;
顺序表的插入操作
cpp
bool ListInsert(SqList &L,int i,ElemType e){
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
顺序表的删除操作
cpp
bool ListDelete(SqList &L,int i,ElemType &e){
if(i<1||i>L.length)
return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}
顺序表按值查找
cpp
int LocateElem(SqList L,ElemType e){
int i;
for(i=0;i<L.length;i++)
if(L.data[i]==e)
return i+1;
return 0;
}
2.3 线性表的链式表示
2.3.1 单链表
单链表的节点类型
cpp
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
插入节点操作
cpp
bool ListInsert(LinkList &L,int i,ElemType e){
LNode *p=L;
int j=0;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
LNode *s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
删除节点操作
cpp
bool ListDelete(LinkList &L,int i,ElemType &e){
LNode *p=L;
int j=0;
while(p->next!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p->next==NULL||j>i-1)
return false;
LNode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
采用头插法建立单链表
cpp
LinkList List_HeadInsert(LinkList &L){
LNode *s; int x;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
采用尾插法建立单链表
cpp
LinkList List_TailInsert(LinkList &L){
int x;
L=(LNode*)malloc(sizeof(LNode));
LNode *s,*r=L;
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
2.3.2 双链表
双链表的节点类型
cpp
typedef struct DNode{
ElemType data;
struct DNode *prior,*next;
}DNode, *DLinkList;
2.3.3 静态链表
静态链表的结构类型
cpp
#define MaxSize 50
typedef struct{
ElemType data;
int next;
}SLinkList[MaxSize];