单链表

单链表的基本操作

1. 建立一个空的带头节点的单链表
2. 采用头插法在单链表中插入n个元素
3. 删除单链表的第i个元素

4. 实现单链表按关键字查找操作
5. 计算单链表的表长并输出单链表
6. 销毁单链表

#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK   1
typedef int Status;
typedef int ElemType;
 typedef struct Node
{
 ElemType data;
 struct Node *next;
} LNode,*LinkList;

void Build(LinkList L)//建立一个带头结点的单链表
{
 int n;
 LinkList p,q;
 p=L;
 printf("请输入n和n个数据元素:\n");
 scanf("%d",&n);
 while(n--)
 {
  q=(LinkList)malloc(sizeof(LNode));
  scanf("%d",&q->data);
  q->next=NULL;
  p->next=q;
  p=q;
 }
}

void Tips()
{
 printf("按数字键选择相应操作\n");
 printf("<1>输出单链表及其长度:\n");
 printf("<2>查找值为x的直接前驱结点:\n");
 printf("<3>删除表中的第i个元素:\n");
 printf("<4>销毁单链表\n") ;
 printf("<0>退出:\n");
}
void Find(LinkList L,int x)//查找值为x的直接前驱结点q
{
 LinkList p;
 p=L;
 while( p->next&&p->next->data!=x)
  p=p->next;
 if(p->next)
  printf("%d的前驱结点为:%d\n\n",x,p->data);
 else
  printf("没找到!!\n\n");
}

Status ListDelete(LinkList L,int i) //删除单链表中第i个元素 
 { 
   int j=0;
   LinkList p=L,q;
   while(p->next&&j<i-1) 
   {
     p=p->next;
     j++;
   }
   if(!p->next||j>i-1) 
     return ERROR;
   q=p->next; 
   p->next=q->next;
   free(q);
   return OK;
 }
 
 void Print(LinkList L)//计算单链表长度并输出单链表 
 {
 int num=0;
 LinkList p;
 p=L->next;
 while(p)
 {
  num++;
  printf("%d",p->data);
  p=p->next;
 }
 printf("\n长度为%d:\n",num);
}
Status DestoryList(LinkList *L)//销毁单链表 
{
 LinkList q;
 while(*L)
 {
  q=(*L)->next;
  free(*L);
  *L=q;
  return OK;
 }
}

int main()
{
 int op,x,i;
 LinkList L,p;
 L=(LinkList)malloc(sizeof(LNode));
 L->next=NULL;
 L->data=-1;
 Build(L);
 Tips();
 scanf("%d",&op);
 while(op)
 {
  switch(op)
  {
  case 1:
   Print(L);
   break;
  case 2:
   printf("请输入要查找的元素X:\n");
   scanf("%d",&x);
   Find(L,x);
   break;
  case 3:
   printf("请输入要查找的删除的元素位置i:\n");
   scanf("%d",&i);
   ListDelete(L,i);
   break;
  case 4:
   DestoryList(&L);
   printf("单链表已被销毁\n"); 
   break;
  }
  Tips();
  scanf("%d",&op);
 }
 return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值