数据结构之单链表基础操作(长度,输出,结点i的值,元素的位置,插入,删除)

单链表的基础操作

求单链表的长度
遍历单链表 用n记录遍历单链表的个数 就是单链表的长度;不计头结点的单链表算法

int ListLenght(Linknode *L)
{
   Linknode *p=L;//p指向头结点
   int n=0;//用n来计数单链表的长度
   while(p->next!=Null)
   {
     n++;
     p=p->next;//p后移
   }
   return n;//返回长度n
}

输出单链表
遍历单链表,依次输出每一个值。

void print(Linknode *L)
{
   Linknode *p=L->next;//p指向首结点
   while(p!=NULL)
   {
     printf("data:%d",p->data);//输出结点p的data值
     p=p->next;//p后移
   }
   printf("\n");
}

求单链表中i结点元素的值
用一个结点p遍历单链表,用j来计数 用e来返回结点的值 若没有找到i则返回0

int Linknode(Linknode *L,int n)
{
   Linknode *p=L;//p指向头结点
   if(i<0) return 0;//i错误返回0
   int j=0;//p指向头结点时 j=0
   while(j<i&&p!=NULL)
   {
      j++;
      p=p->next;
   }//寻找i
   if(p==NULL) return 0;//不存在i结点返回0
   else
    {
       e=p->data;//找到i 使其值等于e
       return e;//返回e
       
    }
}

按元素e找到它的位置 并返回
用p指针遍历单链表,用i记录p的位置最后返回i
若元素不存在返回0

int Linknode(Linknode *L,Elemtype e)
{
   Linknode *p=L;//p指向头结点时 i=0
   int i=0;
   while(p!=NULL&&p->data!=e)
   {
     i++;
     p=p->next;

   }//寻找 元素e的位置
   if(p==NULL) return 0;//不存在e 则返回0
   else 
   return i;//返回e结点的位置
}

在i位置插入元素e
要在i结点插入结点s,则必须找到它的前继结点(i-1)用指针p来遍历单链表 用j记录结点的位置 i错误则返回0 插入成功则输入1

void Insertnode(Linknode *L,Elem type e)
{
   Linknode *p=L;//p指向头结点 j等于0
   int j=0;
   if(i<0) return 0;//不存在i时 返回0
   while(j<i-1&&p!=NULL)
   {
     j++;
     p=p->next;
   }//寻找到i-1的结点
   if(p==NULL) return 0;//若不存在i-1的结点 返回0
   else 
    {
       Linknode *s=(Linknode *)malloc(sizeof(Linknode))
       s->data=e;//创建s结点 将e付给s
       s->next=p->next;
       p->next=s;//将s插到第i个结点
       return 1;//插入成功则返回1
     }
}

删除第i个元素
要删除第i个元素 则需要找到i-1个元素,删除后 返回被删除的元素值e 若不存在i则返回0

int Linknode(Linknode *L,int i)
{
   Linknode *p=L;//p指向头结点
   int j,e;
   if(i<0) return 0;//不存在i 返回0
   while(j<i-1&&p!=NULL)
   {
     j++;
     p=p->next;
   }//寻找 i-1结点
   if(p==NULL) return 0;//若不存在i-1  返回0
   else 
   {
     Linknode *q;
     q=p->next;//令q指向需要删除的结点
     if(q==NULL) return 0;//若不存在q则返回0
     e=q->data;//用e保存q的data
     p->next=q->next;//删除q结点
     free(q);//释放q结点
     return e;//返回被删节点的值
   }
}
发布了7 篇原创文章 · 获赞 0 · 访问量 61

猜你喜欢

转载自blog.csdn.net/m0_46645068/article/details/105196449