c语言实现链表的增删改查

#include<cstdio>
#include<stdlib.h>
using namespace std;
typedef int datatype;
int n;
typedef struct lnode
{
    datatype data;
    struct lnode *next;
}LNode,*LinkList;
LinkList L,H;
//创建一个链表(尾插法)
LinkList creat_LinkList()
{
    LinkList L = NULL;
    LNode *s,*r=NULL;
    int x;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        s=(LNode *)malloc(sizeof(LNode));
        s->data = x;
        if(L == NULL) L=s;
        else r->next = s;
        r = s;
    }
    if(r!=NULL) r->next= NULL; //对于非空表,最后的指针域置空
    return L;
}

int length_LinkList(LinkList L)
{
    LNode * p =L;
    int j=0;
    while(p->next)
    {
        p = p->next;
        j++;
    }
    return j;
}

void print_Link(LinkList  H)
{
    LNode *p= H;
    while(p->next)
    {
        p=p->next;
        printf("%d ",p->data);
    }
    printf("\n");
}
bool search_x(LinkList H,int x)
{
    LNode *p= H;
    while(p->next!=NULL)
    {
        p = p->next;
        if(p->data==x) return true;
    }
    return false;
}

void insert_LinkList(LinkList H,int i,int x)
{
    LNode *p,*s;
    p=H;
    int j=0;
    while(p->next!=NULL&&j<i-1){
        p=p->next;
        j++;
    }
    if(j!=i-1) p=NULL;
    if(p==NULL) printf("参数i错误:\n");
    else
    {
        s=(LNode *)malloc(sizeof(LNode));
        s->data = x;
        s->next = p->next;
        p->next =s;
    }
}

bool delete_x(LinkList H,int x)
{
   LinkList p,s;
   p=H;
   while(p->next)
   {
       s=p;
       p = p->next;
       if(p->data==x){
          s->next = p->next;
          return true;
       }
   }
   return false;
}
int main()
{
    H = (LNode *)malloc(sizeof(LNode));  //定义一个带有头结点的链表
    printf("请输入你需要输入多少数据:\n");
    scanf("%d",&n);
    H->next=creat_LinkList();
    printf("该链表中有多少元素\n");
    printf("%d\n",length_LinkList(H));
    printf("该链表中的元素的数据具体是:\n");
    print_Link(H);
    int m;
    printf("输入你想要查找的元素\n");
    scanf("%d",&m);
    if(search_x(H,m)) printf("%d\n",m);
    else printf("链表中不存在该元素\n");
    int i,x;
    printf("请输入你要插入的位置和数据\n");
    scanf("%d%d",&i,&x);
    insert_LinkList(H,i,x);
    printf("该链表中的元素的数据具体是:\n");
    print_Link(H);
    printf("请输入你要删除的数据\n");
    int x1;a
    scanf("%d",&x1);
    if(!delete_x(H,x1)) printf("没有相关的元素\n");
    printf("该链表中的元素的数据具体是:\n");
    print_Link(H);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值