C++中线性表的单链表存储结构:
typedef struct Lnode{
elemtype data;
struct Lnode *next; //指向下一个结点的指针
}Lnode,*LinkList; //这里给两种变量起了别名,一个是struct Lnode起别名为Lnode,一个是struct Lnode*起别名为LinkList
链表的第一项是不储存数据的头指针
函数GetElem,从单链中取出指定结点的数据赋给指定变量:
status GetElem(LinkList L,int i,elemtype &e){ //LinkList本身即是结构体指针型变量,则L是指针,不用引用传递
LinkList p; //在函数体内声明一个结构体指针型变量p用于循环
int j=1;
p=L->next; //p初始为单链表的第一个结点
while(p&&j<i){ //若p为空指针则说明已遍历到链表末尾,则说明第I个结点不存在
p=p->next;
j++;
}
if(!p||j>i)return false;
e=p->data;
}
函数ListInsert,在单链中指定位置I的前端插入储存指定信息的结点:
status ListInsert(LinkList L,int i,elemtype &e){
LinkList p;int j=1;
p=L->next;
while(p&&j<i-1){ //遍历到链表的第i-1项
p=p->next;
j++;
}
if(!p||j>i-1)return false; //如果链表长度比i小,返回false
LinkList s=(LinkList)malloc(sizeof(Lnode)); //分配安全内存给新结点
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
函数ListDelete,在单链中删除指定结点,并用指定变量返回其值:
status ListDelete(LinkList L,int i,elemtype &e){
LinkList p=L->next;
int j=1;
while(p&&j<i-1){
p=p->next;
j++;
}
if(!p||j>i)return false;
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return true;
}
其它相关操作的函数基本上就是插入,删除,定位的混合。