第二章 线性表--顺序表
typedef struct{
ElemType *elem;//存储空间基址
int length;
int listsize;//当前分配的存储容量(可以没有,初始化时赋值为1)
}SqList;
顺序表的初始化
Status InitList_Sq(SqList &L){
L.elem=(SqList )malloc(MAXSIZEsizeof(SqList));
if(!L.elem){
return 0;
}
L.length=0;
L.listsize=1;
return 1;
}
顺序表的查找
int Locate(SqList L,ElemType key){
int i=0;
for(i=0;i<=L.length-1;i++){
if(L.elem[i]==key){
return 1;
}
}
return 0;
}
顺序表的插入
int ListInsert(SqList &L,int i,ElemType e){
SqList p;
int j=0;
if(1<=i&&i<=L.length+1&&L.length+1<=MAXSIZE){
p=(SqList *)malloc(sizeof(SqList));
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;
}
return 0;
}
顺序表的删除
int ListDelete(SqList &L,int i){
int j;
if(i>=1&&i<=L.length){
for(j=i;j<=L.length-1;j++){
L.elem[j-1]=L.elem[j];
}
L.length--;
return 1;
}
return 0;
}
第二章 线性表--链表
typedef struct Node {
ElemType data;
struct Node *next;
}LNode,*LinkList;
单链表的初始化
Status InitList(LinkList &L){
LinkList L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return 1;
}
单链表的查找
LNode *LocateElem(LinkList L,Elemtype e){
LinkList p=L->next;
while(p&&p->data!=e){
p=p->next;
}
return p;
}
单链表的插入
Status ListInsert(LinkList &L,int i,ElemType e){
LinkList p=L;
int j;
if(!p||j>i-1){
return 0;
}
while(p&&j<i-1){
p=p->next;
j++;
}
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
单链表的删除
Status ListDelete(LinkList &L,int i){
LinkList p=L,q;
int j;
if(!p->next||j>i-1){
return 0;
}
while(p->next&&j<i-1){
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
free(p);
return 1;
}
第三章 栈——顺序栈
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;//栈可用的最大容量
}SqStack;
顺序栈的初始化
Status iniStack(Sqstack &S){
S.base=(Sqstack )malloc(MAXSIZEsizeof(Sqstack));
if(!S.base){
return 0;
}
S.top=S.base;
S.stacksize=MAXSIZE;
return 1;
}
顺序栈的入栈
Status push(Sqstack &S,SElemType x){
if(S.top-S.base==S.stacksize){
return 0;
}
*S.top++=x;
return 1;
}
顺序栈的出栈
Status push(Sqstack &S,SElemType x){
if(S.top==S.base){
return 0;
}
x=*S.top--;
return 1;
}
取顺序栈的栈顶元素
SElemType GetTop(SqStack S){
int value;
if(S.top==S.base){
return 0;
}
return *(S.top-1);
}