头结点:单链表前面附设的一个结点
头指针:从头指针开始,指向第一个结点的指针
首节点:第一个包含元素的结点
单链表的存储结构:
typedef struct Node{ ElemType data; struct Node *next; }Node; typedef struct Node *LinkList; //定义LinkList
单链表的读取实现:
/*获得链表第i个数据 操作结果:用e返回L中第i个元素的值*/ Status GetElem(LinkList L,int i,ElemType *e){ int j; LinkList p; //声明一个结点p p=L->next; //让p指向链表的第一个结点 j=1; //j为计数器 while(p&&j<i){ //*p不为空或者计数器j没有等于i时,循环继续 p=p->next; //p指向下一个结点 ++j; } if(!p||j>i) return ERROR; //第i个元素不存在 *e=p->data; //取第i个元素的数据 return OK; }
单链表的插入实现:
// 两步实现 s->next=p->next; p->next=s; /*初始条件:顺序表已经存在, 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加一 */ Status ListInsert(LinkList *L,int i,ElemType e){ int j; LinkList p,s; p=*L; j=1; while(p&&j<i){ //寻找第i个结点 p=p->next; ++j; } if(!p||j>i) return ERROR; //第i个元素不存在 s=(LinkList)malloc(sizeof(Node)); //生成新结点 s->data=e; s->next=p->next; //将p的后继结点赋给s的后继 p->next=s; //将s赋值给p的后继 return OK; }
单链表的删除实现:
//删除结点实际就一步 q=p->next; p->next=q->next; /*初始条件:顺序表L已经存在, 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减一 */ Status ListDelete(LinkList *L,int i,ElemType *e){ int j; LinkList p,q; p=*L; J=1; while(p->nexsszzz) }
来源:51CTO
作者:xiaosanxian
链接:https://blog.csdn.net/qq_38473009/article/details/101105559