马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在单链表中,又如何实现“插入”和“删除”操作呢? 假设我们要在线性表的两个数据元素a和b之间插入一个数据元素x,已知p为其单链表存储结构中指向结点a的指针。 为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中,根据插入操作的逻辑定义,还需要修改结点a中的指针域,令其指向结点x,而结点x中的指针域应指向结点b,从而实现3个元素a、b和x之间逻辑关系的变化。插入后的单链表所示。假设s为指向结点x的指针,则上述指针修改用语句描述即为 s->next=p->next;p->next=s; 反之,在线性表中删除元素b时,为在单链表中实现元素a、b和c之间逻辑关系的变化,仅修改结点a中的指针域即可。假设p为指向结点a的指针,则修改指针的语句为 p->next= p->next->next 可见,在一直链表中元素插入或删除的确切位置的情况下,在单链表中插入或删除一个结点时,仅需修改指针而不需要移动元素。 Status ListInsert_L(LinkList &L,inti,ElemType e){ //在带头结点的单链线性表L中第i个位置之前插入元素e p=L;j=0; while(p&&j<i-1){p=p->next;++j}//寻找第i-1个结点 if(!p||j>i-1)return ERROR; //i小于1或者大于表长+1 s=(LinkList)malloc(sizeof(LNode));//生成新结点 s->data=e;s->next=p->next; //插入L中 p->next=s; return OK; }//ListInsert_L void ListDelete_L(LinkList &L,inti,ElemType &e){ //在带头结点的单链线性表L中,删除第i个元素,并用e返回其值 p=L;j=0; while (p->next&&j<i-1){//寻找第i个结点,并令p指向其前驱 p=p->next;++j; } if(!(p->next||j>i-1)return ERROR;//删除位置不合理 q=p->next;p->next=q->next; //删除并释放结点 e=q->data;free(q); return OK; }//ListDelete_L 凌阳教育,全国唯一一家原厂式嵌入式培训机构,专业从事嵌入式人才培训13年,最近新开课程信息安全工程师培训,想了解更多嵌入式资料下载或者是凌阳教育的动态,请访问凌阳教育官网www.sunplusedu.com。
|