常用数据结构汇总

链表节点删除的方法

⑴ 按序号删除
删除单链表中的第i个结点。
为了删除第i个结点ai,必须找到结点的存储地址。该存储地址是在其直接前趋结点ai-1的next域中,因此,必须首先找到ai-1的存储位置p,然后令p–>next指向ai的直接后继结点,即把ai从链上摘下。最后释放结点ai的空间,将其归还给“存储池”。
设单链表长度为n,则删去第i个结点仅当1≦i≦n时是合法的。则当i=n+1时,虽然被删结点不存在,但其前趋结点却存在,是终端结点。故判断条件之一是p–>next!=NULL。显然此算法的时间复杂度也是O(n)。

void  Delete_LinkList(LNode *Lint i) 
   /*删除以L为头结点的单链表中的第i个结点 */

{ 
     int  j=1; 
     LNode *p*q;
    p=L;  
    q=L->next;
while  ( p->next!=NULL&& j<i) 
    {  p=q;  
    q=q–>next; 
     j++; 
      } //找到前置节点
if  (j!=i)   
      printf(“i太大或i为0!!\n ”);  
else    
    {  p–>next=q–>next;   
    free(q);  
      }
}

Status Init_Stack(void)
//初始化

{   SqStack  S ;
S.bottom=(ElemType *)malloc(STACK_SIZE *sizeof(ElemType));
if (! S.bottom) return  ERROR;
S.top=S.bottom ;    /*  栈空时栈顶和栈底指针相同  */
S. stacksize=STACK_SIZE; 
return OK ;
}

压栈(元素进栈)

Status push(SqStack S , ElemType  e)
   {  if  (S.top-S.bottom>=S. stacksize-1) 
{   S.bottom=(ElemType *)realloc((S. STACKINCREMENT+STACK_SIZE) *sizeof(ElemType));   /*  栈满,追加存储空间  */
if (! S.bottom)  return  ERROR; 
S.top=S.bottom+S. stacksize ;
S. stacksize+=STACKINCREMENT ;
}  
*S.top=e;  S.top++ ; /*  栈顶指针加1,e成为新的栈顶 */
return OK;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值