实现单链表的各种基本运算

1.头文件

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

2.初始化单链表

typedef struct LNode{
    ElemType data;
    struct LNode * next;
}LinkNode;


    LinkNode *p;
    p = (LinkNode * ) malloc(sizeof(LinkNode));
    p -> next = NULL;

3.尾插法插入a、b、c、d、e元素

void CreateLNode(LinkNode * L,ElemType a[],int n){
    LinkNode *p,*q;
    p = L;
    for (int i = 0; i < n; ++i) {
        q = (LinkNode * ) malloc(sizeof(LinkNode));
        q -> data = a[i];
        p -> next = q;
        p = q;
        printf("插入成功%c\n",a[i]);
    }
    p -> next = NULL;
}

4.输出单链表

void DisLNode(LinkNode * L){
    LinkNode *p = L -> next;
    while (p != NULL){
        printf("%c  ",p -> data);
        p = p -> next;
    }
    printf("\n");
}

5.输出单链表的长度

int LengthLNode(LinkNode * L){
    if(L -> next == NULL){
        printf("链表为空\n");
        return 0;
    }
    else{
        int n = 0;
        while (L -> next != NULL){
            n++;
            L = L -> next;
        }
        printf("长度为%d\n",n);
        return n;
    }
}

6.判断单链表是否为空

bool EmptyLNode(LinkNode * L){
    if(L -> next == NULL){
        printf("链表为空\n");
        return false;
    }
    else{
        printf("链表不为空\n");
        return true;
    }
}

7.输出单链表的第3个元素

bool GetLNode(LinkNode * L,int i,ElemType x){
    LinkNode *p = L -> next;
    for (int j = 1; j < i; ++j) {
        if(p == NULL){
            printf("位置不合法\n");
            return false;
        }
        else
            p = p -> next;
    }
    if(p == NULL){
        printf("位置不合法\n");
    }
    else{
        printf("第%d个是%c\n",i,p -> data);
    }
}

8.输出元素a的位置

bool GetLNodeF(LinkNode * L,ElemType x){
    LinkNode *p = L -> next;
    int cnt = 1;
    while (p != NULL && p -> data != x) {
        p = p->next;
        cnt++;
    }
    if(p != NULL){
        printf("%c在第%d位\n",x,cnt);
        return true;
    }
    else{
        printf("查无此值\n");
        return false;
    }
}

9.在第4个位置上插入f元素

bool InsertLNode(LinkNode * L,int i,ElemType x){
    if(i <= 0) {
        printf("位置不合法\n");
        return false;
    }
    LinkNode *p = L -> next,*q;
    int j; i--;
    for (j = 1;j < i; ++j) {
        if(p == NULL){
            printf("位置不合法\n");
        }
        else p = p -> next;
    }
    q = (LinkNode * ) malloc(sizeof(LinkNode));
    q -> data = x;
    if(p -> next != NULL)
    q -> next = p -> next;
    p -> next = q;
    printf("%c插入成功\n",x);
    return true;
}

10.输出单链表

11.删除单链表的第3个元素

bool DelLNode(LinkNode * L,int i,ElemType x){
    if(i <= 0){
        printf("位置不合法\n");
        return false;
    }
    LinkNode * p = L -> next,*q;
    int j; i--;
    for (j = 1; j < i; ++j) {
        if(p == NULL){
            printf("位置不合法\n");
            return false;
        } else p = p -> next;
    }
    q = p -> next;
    if(q == NULL)
        return false;
    x = q -> data;
    p -> next = q -> next;
    free(q);
    printf("%c删除成功\n",x);
    return true;
}

12.输出单链表

13.释放单链表

void DestroyLNode(LinkNode * L){
    LinkNode *pre = L,*p = L -> next;
    while (p != NULL){
        free(pre);
        pre = p;
        p = pre -> next;
    }
    free(pre);
    printf("销毁成功\n");
}

14.主函数

int main(){
    LinkNode *p;
    p = (LinkNode * ) malloc(sizeof(LinkNode));
    p -> next = NULL;
    ElemType ch[5] = {'a','b','c','d','e'};
    CreateLNode(p,ch,5);
    DisLNode(p);
    LengthLNode(p);
    EmptyLNode(p);
    ElemType x;
    GetLNode(p,3,x);
    GetLNodeF(p,'a');
    InsertLNode(p,4,'f');
    DisLNode(p);
    DelLNode(p,3,x);
    DisLNode(p);
    DestroyLNode(p);
    return 0;
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值