数据结构之单链表

定义:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。

链表中单数据是以结点来表示的,每个结点的构成由:数据域+指针域。

单链表代码如下:

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
   int data;
   struct node *next;

}link_list;

link_list *init_list()  //链表初始化
{
  //  node=p;
   link_list *node=NULL;
   node=(link_list *)malloc(sizeof(link_list));
   node->data=0;
   node->next=NULL;
   return  node;
}

void head_list(link_list *p,int data) //链表头插法
{

     link_list  *node=NULL;

    node=(link_list *)malloc(sizeof(link_list));

     node->data=data;

     node->next=p->next;
     p->next=node;
   //node->next=p->next;

     p->data++;
}

int list_length(link_list *l) //计算链表长度
{
   int i=0;
   link_list *p=NULL;
     p=l->next; //
   while(p!=NULL)
    {
     p=p->next;
      i++;
    }
     return i;
}

int    list_searth(link_list *l,int i) //查询链表元素的位置具体值
{
  int j=1;
  link_list *p=NULL;
   p=l->next;
  while(p!=NULL && j<i)
  {
    p=p->next;
    ++j;
  }
  if(p==NULL || j>i)
  {
      printf("no data\n");
      return -1;
  }
  return   p->data;

}
void  nail_list(link_list *p,int data) //链表尾插法
{
 //  p->data++;
  link_list  *node=p;
  int i=0;
  for(i=0;i< p->data;i++)
      {
         node =node->next;
      }

   link_list *n=(link_list *)malloc(sizeof(link_list));

     n->data=data;
     n->next=NULL;
     node->next=n;
     p->data++;
}
void print_list(link_list *p) //链表打印
{
  link_list  *node=NULL;
   node=p->next;

  while(node)
   {
       printf("data=%d\n",node->data);
       node=node->next;
   }

}
int  delet_list(link_list *p,int data) //链表删除
{
    link_list *node=p->next;
    link_list *prenode=p;
    while(node)
    {
       if(node->data==data)
          prenode->next =node->next;
          free(node);
          p->data--;
      return 1;
    }

     prenode=node;
     node=node->next;
   return 0;
}

int main()      //主函数
{
    link_list  *l=init_list();
        head_list(l,1);
        head_list(l,2);
        head_list(l,3);
        head_list(l,4);
        head_list(l,5);

        nail_list(l,8);
        nail_list(l,9);
        print_list(l);
       printf("lenth=%d\n",list_length(l));
    //   l= list_searth(l,3);
          printf("searth data is=%d\n",list_searth(l,2));

       free(l);
   return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值