单链表的基本操作

该博客给出了链表操作的代码实现,包含定位、插入和删除功能。定义了定位函数 LocLinkList,插入函数 InsLinkList,删除函数 DelLinkList,还设计了菜单函数 menu 供用户选择操作,在主函数中实现了链表的初始化及操作调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#i nclude<stdio.h>
 #i nclude<stdlib.h>
 #define flag  0
typedef  struct node
{
    int data;
    struct node *next;
 } LNode,*LinkList;
LinkList InitLinkList()
{
    LinkList L;
    LNode *s;
    int x;
    L->data=NULL;
    L->next=NULL;
    scanf("%d",&x);
    while(x!=flag)
     {
        s=(LNode*)malloc(sizeof(LNode));
        s->data=x;
        s->next=L;
        L=s;
        scanf("%d",&x);
     }
     return L;
}
void DispLinkList(LinkList L)
{
    LNode *p=L;
    while(p->next!=NULL)
    {
     printf("%5d",p->data);
     p=p->next;
    }
    printf("/n");

}
LNode *LocLinkList(LinkList L,int pos)
{
  LNode *p=L;
  int j=0;
  while(p->next&&j<pos)
  {p=p->next;
  j++;
  }
  if(j==pos)
  return p;
  else
  return NULL;
}
int InsLinkList(LinkList L,int pos,int e)
{
 LNode *p=L,*s;
 p=LocLinkList(L,pos-1);
 if(p==NULL)
 {
 printf("haha,error");
 return 0;
 }
 else
 {
 s=(LNode*)malloc(sizeof(LNode));
 s->data=e;
 s->next=p->next;
 p->next=s;
 return 1;
 }
}
int DelLinkList(LinkList L,int pos)
{
LinkList p,s;
p=LocLinkList(L,pos-1);
if(p==NULL)
{printf("there is no data");
return -1;
}
else
if (p->next==NULL)
{printf("there is no data");
return 0;
}
else
{
 s=p->next;
 p->next=s->next;
 free(s);
}
return 1;
}
void menu()
{
 printf("0----exit/n");
 printf("1----locate/n");
 printf("2----insert/n");
 printf("3----delete/n");
}

void main()
{
   LinkList head;
   LNode *temp;
   int MenuNumber;
   int pos,e;
   printf("please input the initData:/n");
      head=InitLinkList();
      DispLinkList(head);
      menu();
      scanf("%d",&MenuNumber);
     while (MenuNumber!=0)
     {
      switch(MenuNumber)
      {
      case 1:
      printf("please input what you want to locate:/n");
      scanf("%d",&pos);
      temp=LocLinkList(head,pos);
      printf("%d/n",temp->data);
      break;
      case 2:
      printf("please input what you want to insert:/n");
      scanf("%d%d",&pos,&e);
      InsLinkList(head,pos,e);
      DispLinkList(head);
      break;
      case 3:
      printf("please input what you want to delete:/n");
      scanf("%d",&pos);
      DelLinkList(head,pos);
      DispLinkList(head);
      break;
      default:printf("error,^^^/n");
      }
      scanf("%d",&MenuNumber);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值