线性链表,单链表的插入和删除结点的核心语句?
Status ListInsert(LinkList &L,int i,ElemType e) { // 在不设头结点的单链线性表L中第i个位置之前插入元素e int j=1; // 计数器初值为1 LinkList s,p=L; // p指向第1个结点 if(i<1) // i值不合法 return ERROR; s=(LinkList)malloc(sizeof(LNode)); // 生成新结点,以下将其插入L中 s->data=e; // 给s的data域赋值e if(i==1) // 插在表头 { s->next=L; // 新结点指向原第1个结点 L=s; // L指向新结点(改变L) } else { // 插在表的其余处 while(p&&j<i-1) // 寻找第i-1个结点 { j++; // 计数器+1 p=p->next; // p指向下一个结点 } if(!p) // i大于表长+1 return ERROR; // 插入失败 s->next=p->next; // 新结点指向原第i个结点 p->next=s; // 原第i-1个结点指向新结点 } return OK; // 插入成功 } Status ListDelete(LinkList &L,int i,ElemType &e) { // 在不设头结点的单链线性表L中,删除第i个元素,并由e返回其值 int j=1; // 计数器初值为1 LinkList q,p=L; // p指向第1个结点 if(!L) // 表L空 return ERROR; // 删除失败 else if(i==1) // 删除第1个结点 { L=p->next; // L由第2个结点开始(改变L) e=p->data; // 将待删结点的值赋给e free(p); // 删除并释放第1个结点 } else { while(p->next&&j<i-1) // 寻找第i个结点,并令p指向其前驱 { j++; // 计数器+1 p=p->next; // p指向下一个结点 } if(!p->next||j>i-1) // 删除位置不合理 return ERROR; // 删除失败 q=p->next; // q指向待删除结点 p->next=q->next; // 待删结点的前驱指向待删结点的后继 e=q->data; // 将待删结点的值赋给e free(q); // 释放待删结点 } return OK; // 删除成功 }
循环结构是线性结构吗?
是的;循环链表是线性结构。循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
十字链表和二叉树结构有什么区别?
区别为:指针不同、指向不同、访问不同。十字链表和二叉树链表都能从链表中的任何一个结点出发能找到任何其他结点。都用来存放线性表中的数据元素。线性表概念?
线性表
数据结构种类之一
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
线性表中数据元素之间的关系是一对一的关系,即除了之一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)
如果每个结点有2个指针域?
您好!
线性结构的特点是:在数据元素的非空有限集中,存在惟一的一个被称做“之一个”的数据元素;存在惟一的一个被称做“最后一个”的数据元素;除之一个外,***中的每个数据元素均只有一个前驱;除最后一个之外,***中每个数据元素均只有一个后继。
答案是:不一定,要看这个两个指针的指向而定。
希望能帮到您,谢谢!