zoukankan      html  css  js  c++  java
  • 初学数据结构——单链表

        看了一天的数据结构。突然觉得自己太迟没有看到这本书。如果不是要学习并查集,估计我这辈子可能不会去看数据结构这本书。因为单从书名来看,我就觉得是非常深奥的知识,但是能把深奥的知识学懂一点点,也是很快乐的事。

        今天自己写了单链表,虽然和书上的大有不同,但是实现的意义是相同的。
        (>_<觉得自己好蠢,写了一下午才写出来。笨死了!!)

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 
      5 typedef int elemtype;
      6 
      7 typedef struct node
      8 {
      9     elemtype data;
     10     struct node *next;
     11 }Node;
     12 
     13 typedef struct node *linklist;
     14 
     15 linklist create_list(linklist head, elemtype n) //创建链表
     16 {
     17     linklist pre;
     18     head = (linklist)malloc(sizeof(Node));
     19     pre  = (linklist)malloc(sizeof(Node));
     20     head->next = pre;
     21     scanf("%d",&pre->data);
     22     for(int i = 1; i < n; i++)
     23     {
     24         pre->next = (linklist)malloc(sizeof(Node));
     25         pre = pre->next;
     26         scanf("%d",&pre->data);
     27     }
     28     pre->next = NULL;
     29     return head;
     30 }
     31 
     32 linklist add_element_tail(linklist head, elemtype data) //从尾部增加元素
     33 {
     34     linklist pre,temp;
     35     pre = head->next;
     36     temp = (linklist)malloc(sizeof(Node));
     37     temp->data = data;
     38     while(pre->next != NULL)
     39     {
     40         pre = pre->next;
     41     }
     42     pre->next = temp;
     43     temp->next = NULL;
     44     return head;
     45 }
     46 
     47 linklist add_element_head(linklist head, elemtype data)  //从头部增加元素
     48 {
     49     linklist pre,temp;
     50     pre = head->next;
     51     temp = (linklist)malloc(sizeof(Node));
     52     temp->data = data;
     53     head->next = temp;
     54     temp->next = pre;
     55     return head;
     56 }
     57 
     58 linklist insert_take_place(linklist head, elemtype data, int place) //根据位置增加元素
     59 {
     60     linklist pre,temp;
     61     pre = head;
     62     temp = (linklist)malloc(sizeof(Node));
     63     temp->data = data;
     64     for(int i = 0; i < place; i++)
     65     {
     66         pre = pre->next;
     67     }
     68     temp->next = pre->next;
     69     pre->next = temp;
     70     return head;
     71 }
     72 
     73 linklist insert_take_value(linklist head, elemtype data, elemtype value) //根据数据值增加元素
     74 {
     75     linklist pre,temp;
     76     pre = head->next;  //如果要在值前面插入 请更换此行语句为pre = head;
     77     temp = (linklist)malloc(sizeof(Node));
     78     temp->data = data;
     79     while(pre->data != value)  //如果要在值前面插入 请更换此行语句为pre->next->data == value
     80     {
     81         pre = pre->next;
     82     }
     83     temp->next = pre->next;
     84     pre->next =temp;
     85     return head;
     86 }
     87 
     88 void delete_list(linklist &head)  //删除链表
     89 {
     90     linklist pre;
     91     while(head != NULL)
     92     {
     93         pre = head->next;
     94         free(head);
     95         head = pre;
     96     }
     97     printf("List was deleted
    ");
     98 }
     99 
    100 void print_list(linklist head) //打印链表
    101 {
    102     if(head == NULL)
    103         printf("No List
    ");
    104     else
    105     {
    106         head = head->next;
    107         while(head != NULL)
    108         {
    109             printf("%d ",head->data);
    110             head = head->next;
    111         }
    112         printf("
    ");
    113     }
    114 }
    115 
    116 
    117 int main()
    118 {
    119     linklist phead = NULL;
    120     phead = create_list(phead,10);
    121     phead = add_element_tail(phead,11);
    122     phead = add_element_head(phead,12);
    123     phead = insert_take_place(phead,13,5);
    124     phead = insert_take_value(phead,14,13);
    125     print_list(phead);
    126     delete_list(phead);
    127     print_list(phead);
    128     return 0;
    129 }
  • 相关阅读:
    图像的点运算----底层代码与Halcon库函数
    C#跨线程调用控件
    Halcon学习笔记——条形码的定位与识别
    简单实用angular.js购物车功能
    xampp与Hbuilder、phpstorm配置
    AJAX实现简单的注册页面异步请求
    querySelector系列方法相比 getElementsBy 系列方法有什么区别?
    用了那么久的函数,你知道函数是怎么调用的吗??
    JS eval()函数的一些见解
    5分钟让你掌握css3阴影、倒影、渐变小技巧!
  • 原文地址:https://www.cnblogs.com/hersen/p/3244163.html
Copyright © 2011-2022 走看看