数据结构单链表的简单应用

因为数据结构的书上很多都是伪代码,所以在这里共享下自己摸索出来的怎么样数据结构的完整简单编程,给自学者参考,参考。

头插法的简单应用:

///////////////////////定义一个节点类型////////////////////////
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
 int data;
 struct node *next;
}lnode,*link;
///////////////////////////////////////////////////////////////
 link tou()                                      //头结点输入
 {
  int x;
  link l,p;
  l=(lnode*)malloc(sizeof(lnode));           //动态分配一个内存空间
  l->next=NULL;
  printf("please input some number\n");
  scanf("%d",&x);                            //输入
   while(x!=0000)
   {
    p=(lnode*)malloc(sizeof(lnode));
    p->data=x;
    p->next=l->next;
    l->next=p;
    scanf("%d",&x);
   }
   return l;
 }
 ////////////////////////////////////////////////////////////////
 int tt(link l)
{
     int j;
    link p;
   p=l->next;
   j=0;
   while(p)
   {
   j++;
   p=p->next;
}
return j;
}

////////////////////////////////////////////////////////////////
 void zhaoshu(link l,int i)
 {
  link p;
     p=l->next;
  while(p->data!=i && p!=NULL)
  {
   p=p->next;
  }
   if(p->data!=i)
   {
    printf("你输入的数没有相同的\n");
    exit(0);
   }
       
   else
    printf("你输入的数有相同的\n");
 }
////////////////////////////////////////////////////////////////
void print(link l)
  {
  link p;
   p=l->next;
   printf("你输入的数有:\n");
   while (p!=NULL)
   {
   printf("%5d",p->data);
    p=p->next;
   }
   printf("\n");
  }
///////////////////////////////////////////////////////////////
     void shan(link l,int t)
  {
   int x;
   lnode *p,*pre,*q;
   pre=l;
   p=l->next;
   while(p!=NULL &&  p->data!=t)
   {  
    pre=p;
    p=p->next;
   }
   if(p->data!=t)
   {
    printf("没有这个节点,所以不能删除\n");
   
   }
   else
   {
    x=p->data;
    pre->next=p->next;
    free(p);
    printf("这个带有数据%d的节点被删除\n",x);
   }
   q=l->next;
  
   while(q!=NULL)
   {
    printf("%5d",q->data);
    q=q->next;
   }
   printf("\n");
  }
 
//////////////////////////////////////////////////////////////////////
      void zhengjia(link l, int i)
   {
    link s,p,q;
    int x;
    printf("请输入一个数,然后就可以插进里面去\n");
    scanf("%d",&x);
    p=l->next;
    s=(lnode*)malloc(sizeof(lnode*));
    s->data=x;
          while(p!=NULL && p->next->data!=i)
    {
     p=p->next;
    }
    s->next=p->next;
    p->next=s;
            q=l->next;
  
   while(q!=NULL)
   {
    printf("%5d",q->data);
    q=q->next;
   }
   printf("\n");
  }
//////////////////////////////////////////////////////////////////////


  void   main()
 {
   int t,i,p;
   link l;
   printf("请输入一个数\n");
   scanf("%d",&i);
   l=tou();
   print(l);
   t=tt(l);
   printf("你总共输入了%d个数\n",t);
   zhaoshu(l,i);
   shan(l,i);
  scanf("%d",&p);
   zhengjia(l,p);
 }
 //////////////////////////////////////////////////////////////////

尾插法的简单应用:

//////////////////////定义一个节点类型/////////////////////////////////////
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
 int data;
 struct node *next;
}lnode,*link;
//////////////////////通过尾插法构建一个链表//////////////////////////////////////
link weicha()
{
 link l,r,p;                           //3个相同类型的指针
 int x;
 printf("请往节点中输入数字\n");
 l=(lnode*)malloc(sizeof(lnode*));     //l指针
        l->next=NULL;                         //头结点赋值为空
 r=l;                                  //r指针=l指针
 scanf("%d",&x);                       //输入
 while(x!=0000)   
 {
  p=(lnode*)malloc(sizeof(lnode*)); //动态分配一个内存空间
  p->data=x;      
  p->next=r->next;
  r->next=p;                        //在尾部插入新节点
  r=p;                              //指向新的尾节点
  scanf("%d",&x);
 }
 return l;
}
//////////////////////////////////////////////////////////////
 void print(link l)                        //输出
 {
  link p;
  p=l->next;                             //这个类型的p指向l链表的头结点
  while(p!=NULL)
  {
        printf("%3d",p->data);              //输出
  p=p->next;
  }
  printf("\n");    
 }
 /////////////////////////////////////////////////////////////////////
 void main()
 {
  link l;                              
  l=weicha();                           //定义一个
  print(l);
 }
//////////////////////////////////////////////////////////////////////

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值