数据结构与算法分析--单链表

匿名 (未验证) 提交于 2019-12-03 00:10:02

头结点:单链表前面附设的一个结点

头指针:从头指针开始,指向第一个结点的指针

首节点:第一个包含元素的结点

单链表的存储结构:

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) }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!