数据结构---单链表的基础操作(增删改查)

本文介绍了单链表的基本操作,包括头插法和尾插法创建链表,通过序号获取元素,查找指定元素,删除指定序号节点以及插入新元素。并提供了完整的C语言实现代码。
摘要由CSDN通过智能技术生成
  1. #define _CRT_SECURE_NO_WARNINGS

  2. #include<stdio.h>

  3. #include<stdlib.h>

  4. typedef int Elemtype;

  5. typedef struct LNode {

  6.     Elemtype data;

  7.     struct LNode* next;

  8. }LNode,*LinkList;

  9. LinkList HeadLinkList(LinkList& L) {

  10.     L = (LNode*)malloc(sizeof(LNode));

  11.     LinkList s;

  12.     int x;

  13.     scanf("%d",&x);

  14.     while (x != 999) {

  15.         s = (LNode*)malloc(sizeof(LNode));

  16.         s->data = x;

  17.         s->next = L->next;

  18.         L->next = s;

  19.         scanf("%d", &x);

  20.     }

  21.     return L;

  22. }

  23. LinkList EndLinkList(LinkList& L) {

  24.     L = (LNode*)malloc(sizeof(LNode));

  25.     LinkList s,r=L;//R是表尾节点

  26.     int x;                                                                                                                                                                                                  

  27.     scanf("%d", &x);

  28.     while (x != 999) {

  29.     s = (LNode*)malloc(sizeof(LNode));

  30.     s->data = x;

  31.     r->next = s;

  32.     r = s;

  33.     scanf("%d", &x);

  34.     }

  35.     r->next = NULL;

  36.     return L;

  37. }

  38. LNode* GetELem(LinkList L,Elemtype i) {

  39.     LinkList p = L->next;

  40.     int  j = 1;

  41.     if (i == 0)

  42.         return L;

  43.     if (i < 1)

  44.         return NULL;

  45.     while (p && j < i)

  46.     {

  47.         p = p->next;

  48.         j++;

  49.     }

  50.     return p;

  51. }

  52. LinkList LocateElem(LinkList L, Elemtype e) {

  53.     LinkList p = L;

  54.     while (p!=NULL && p->data!= e) 

  55.         p = p->next;

  56.     return p;

  57. }

  58. LinkList DeleteList(LinkList& L, Elemtype i) {//根据序号删除指定节点

  59.     LinkList p = GetELem(L, i-1);

  60.     LinkList q = p->next;

  61.     //printf("%d\n", q->data);

  62.     p->next = q->next;

  63.     free(q);

  64.     return L;

  65. }

  66. LNode* InsertList(LinkList& L, Elemtype i) {

  67.     LinkList p = GetELem(L, i - 1);

  68.     LinkList s = (LNode*)malloc(sizeof(LNode));

  69.     Elemtype x;

  70.     printf("please input insert in:\n");

  71.     scanf("%d", &x);

  72.     s->data = x;

  73.     s->next = p->next;

  74.     p->next = s;

  75.     return  L;

  76. }

  77. void PrintList(LinkList L) {

  78.       L = L->next;

  79.     while (L != NULL) {

  80.         printf("%3d", L->data);

  81.         L = L->next;

  82.     }

  83.     printf("\n");

  84. }

  85. int main(){

  86.     LinkList L;

  87.     LinkList search;

  88.     LinkList locate;

  89.     LinkList del;

  90.     //printf("请输入节点:\n");

  91.     //HeadLinkList(L);

  92.     //printf("你所创建的头插单链表是:\n");

  93.     //PrintList(L);

  94.     printf("请输入节点:\n");

  95.     EndLinkList(L);

  96.     printf("你所创建的尾插单链表是:\n");

  97.     PrintList(L);

  98.     printf("输入需要查找的序号的值:\n");

  99.     Elemtype i;

  100.     scanf("%d", &i);

  101.     search = GetELem(L, i);

  102.     if (search != NULL) {

  103.         printf("success:\n");

  104.         printf("%d\n", search->data);

  105.     }

  106.     int e;

  107.     printf("please input locateElem:\n");

  108.     scanf("%d", &e);

  109.     locate = LocateElem(L, e);

  110.     if (locate != NULL) {

  111.         printf("sucess:\n");

  112.         printf("%d\n", locate->data);

  113.     }

  114.     Elemtype in;

  115.     printf("please input in:\n");

  116.     scanf("%d", &in);

  117.     LinkList insert;

  118.     insert = InsertList(L, in);

  119.     printf("new Linklist:\n");

  120.     PrintList(insert);

  121.     Elemtype d;

  122.     printf("please input delete:\n");

  123.     scanf("%d", &d);

  124.     del = DeleteList(L, d);

  125.     PrintList(del);

  126.     return 0;

  127.  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值