🍓个人主页:bit..
🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题
目录
算法步骤:
- status InitList L(LinkList &L){
- L=new LNode; //C语言L=(LinkList)macll(sizeof(LNode));
- L-->next=NULL;
- return ok;
- }
-
-
-
-
- typedef struct Lnode{
- ElemType data;
- struct Lnode *next;
- }LNode,*Linklist;
空表:链表中无元素,称为空链表(头指针和头节点任然存在)
思路:判断头节点指针域是否为空
- int ListEmpty(LinkList L){
- if(L-->next)
- return o;
- eles
- return 1;
- }
算法思路:从头指针开始,依次释放所有结点
- Status DestroyList_l(LinkList &L){ //销毁单链表L
- Lnod *p; //或LinkList p;
- while(L){
- p=L;
- L=L-->next;
- delete p;
- }
- return ok;
- }
链表任然存在,但链表中无元素,成为空链表(头指针和头节点任然存在)
算法思路:
依次释放所有结点,并将头节点指针域置为空。
- status ClearList(LinkList &L){ //将L重置为空表
- Lnode *p,*q; 或者LinkList p,q;
- p=L-->next;
- while(p){
- q=P-->next;
- delete p;
- p=q;
- }
- L--next=NULL; //将头节点指针域置为空;
- return ok;
- }
算法思路:从首元结点开始,依次计算所有节点
- int ListLength_L(LinkList L){ //返回L中数据元素的个数
- LinkList p; //或者LNode *p
- p=L-->next;
- i=0;
- while(p){
- i++;
- p=p-->next;
- }
- return i
- }
取值——取单链表中第i个元素的内容(带头节点)
顺序表中 L-->elem[i-1] L-->Length
(随机存储)从头指针开始一直到找到输出
(从链表的头指针出发,顺着链域next逐个结点往下搜索,直至搜索到第i个为止,因此,链表不是随机存取结)
算法步骤
- status GetElem_L(LinkList L,int i,ElemTyoe &e){
- //获取线性表L中的某个数据元素的内容,通过变量e返回
- p=L-->next; j=1;
- while(p&&j<i){ //向后扫描,直到p指向第i个元素或者p为空
- p=p-->next;
- ++j;
- }
- if(!p||j>i) //第i个元素不存在
- return ERROR;
- e=P-->data; //取第i个元素
- return ok;
- }//GetElem_l
按值查找:根据指定数据获取该数据元素所在的位置(该数据的地址)
按值查找:根据指定数据获取该数据所在的位置序号(是第几个数据元素)
算法步骤;
算法描述:
1.返回地址
- Lnode *LocateElem_L(LinkList L,Elemtype e){
- //在线性表L中查找值为e的数据元素
- //找到,则返回L中值为e的数据元素的地址,失败则返回NULL
- p=L-->next;
- while(p&&p-->data!=e)
- {
- p=p-->next;
- return p;
- }
- return 0;
- }
2.返回位置序号
- int LocateElem_L(LinkList L,Elemtype e){
- //在线性表L中查找值为e的数据元素的序号
- //返回L中值为e的数据元素的位置序号,失败返回0
- p=L-->next: j=1;
- while(p&&p-->data!e)
- {
- p=p-->next;
- j++;
- }
- if(p) return j;
- else return 0;
- }
算法步骤:
算法描述
- //在L中第i个元素之前插入数据元素e
- Status Listlnsert_L(LinkList &L,int i,ElemType e){
- p=L;j=0;
- while(p&&j<i-1)
- {
- p=p-->next;
- ++j;
- }//寻找第i-1个结点,p指向i-1结点
- if(!p||j>i-1)
- return ERROR; //i大于表长加一或者小于一,插入元素非法。
- s=new LNode;
- s-->data=e;
- //生成新节点s将s数据域置为e
- s-->next=p-->next;
- p-->next=s; //将结点s插入L中
- return ok;
- }//Linklist_L
算法步骤:(找到i-1结点)
算法描述;
- //将线性表L中第i个元素数据元素删除
- status ListDelete_L(LinkList &L,int i,ElemType &e){
- p=L;j=0;q;i;
- while(p-->next&&j<j-1)
- {
- p=p-->next;
- ++j;
- }//寻找第i个结点,并令p指向其前驱
- if(!(p-->next)||j>j+1)
- return ERROR;//删除位置不合理
- q=p-->next; //临时保存被删除结点的地址以备释放
- p-->next=q-->next; //改变删除结点前驱结点的指针域
- e=q-->next;
- delept q; //释放删除结点的空间
- return ok;
- } //ListDelete_L