zoukankan      html  css  js  c++  java
  • c语言实现对传统单链表的创建、添加 遍历 删除 反转元素操作

    1、链表定义

      链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

    typedef struct Node {
        int data;
        struct Node *next;    //next指针指向自己这种数据类型,这就形成了链表
    }SList;

                          单向链表的结构图

    2、创建、添加 遍历 删除 反转元素操作功能实现

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 
      4 typedef struct Node {
      5     int data;
      6     struct Node *next;
      7 }SList;
      8 
      9 int SList_Create(SList **p/**out*/) {
     10     int data = 0;
     11     int ret = 0;
     12     SList *pHead = NULL;
     13     SList *node = NULL;
     14     SList *tmp = NULL;
     15     pHead = (SList *)malloc(sizeof(SList));
     16     if(pHead == NULL) {
     17         ret = -1;
     18         printf("SList_Create erro
    ");
     19         goto End;
     20     }
     21     tmp = pHead;
     22     printf("请输入一个整数数据
    ");
     23     scanf("%d", &data);
     24     while(data != -1) {
     25         node = (SList *)malloc(sizeof(SList));
     26         if(node == NULL) {
     27             ret = -1;
     28             printf("SList_Create erro
    ");
     29             goto End;
     30         }
     31         node->data = data;
     32         tmp->next = node;
     33         tmp = node;
     34         printf("请输入一个整数数据
    ");
     35         scanf("%d", &data);
     36     }
     37     node->next = NULL;
     38     *p = pHead;
     39 End:
     40     if(ret != 0) {
     41         if(pHead != NULL) {
     42             free(pHead);
     43             pHead = NULL;
     44         }
     45         if(node != NULL) {
     46             free(node);
     47             node = NULL;
     48         }
     49     }
     50     return ret;
     51 }
     52 
     53 void print_List(SList *pHead) {
     54     SList *pTmp;
     55     if(pHead == NULL || pHead->next == NULL) {
     56         printf("SList is NULL
    ");
     57     }
     58     pTmp = pHead;
     59     while(pTmp->next) {
     60         printf("%d ", pTmp->next->data);
     61         pTmp = pTmp->next;
     62     }
     63 }
     64 
     65 int insert_List(SList *pHead/**in*/, int targetNum, int insertNum) {
     66     int ret = 0;
     67     SList *pPre = NULL;
     68     SList *pCur = NULL;
     69     SList *pNode = NULL;
     70     if(pHead == NULL || pHead->next == NULL) {
     71         ret = -1;
     72         printf("insert_List erro
    ");
     73         return ret;
     74     }
     75     pCur = pHead->next;
     76     pPre = pHead;
     77     pNode = (SList *)malloc(sizeof(SList));
     78     if(pNode == NULL) {
     79         ret = -1;
     80         printf("insert_List erro
    ");
     81         return ret;
     82     }
     83     pNode->data = insertNum;
     84     while(pCur) {
     85         if(pCur->data == targetNum) {
     86             break;
     87         }else {
     88             pPre = pCur;
     89             pCur = pCur->next;
     90         }
     91     }
     92     pNode->next = pCur;
     93     pPre->next = pNode;
     94     return ret;
     95 }
     96 
     97 int delete_List(SList *pHead, int deleteNum) {
     98     int ret = 0;
     99     SList *pPre = NULL;
    100     SList *pCur = NULL;
    101     if(pHead == NULL || pHead->next == NULL) {
    102         ret = -1;
    103         printf("delete_List erro
    ");
    104         return ret;
    105     }
    106     pPre = pHead;
    107     pCur = pHead->next;
    108     while(pCur) {
    109         if(pCur->data == deleteNum) {
    110             break;
    111         }else {
    112             pPre = pCur;
    113             pCur = pCur->next;
    114         }
    115     }
    116     if(pCur == NULL) {
    117         ret = -2;
    118         printf("not exist this num");
    119         return ret;
    120     }
    121     pPre->next = pCur->next;
    122     pCur->next = NULL;
    123     if(pCur != NULL) {
    124         free(pCur);
    125     }
    126     return ret;
    127 }
    128 
    129 void destory_List(SList **p) {
    130     SList *pHead = NULL;
    131     SList *tmp = NULL;
    132     if(p == NULL || *p == NULL) {
    133         return;
    134     }
    135     pHead = *p;
    136     while(pHead) {
    137         tmp = pHead->next;
    138         if(pHead != NULL) {
    139             free(pHead);
    140         }
    141         pHead = tmp;
    142     }
    143     *p = NULL;
    144 }
    145 
    146 void reverse_List(SList *pHead) {
    147     SList *pPre = NULL;
    148     SList *pCur = NULL;
    149     SList *pTmp = NULL;
    150     if(pHead == NULL || pHead->next == NULL || pHead->next->next == NULL) {
    151         return;
    152     }
    153     pPre = pHead->next;
    154     pCur = pHead->next->next;
    155     while(pCur) {
    156         pTmp = pCur->next;
    157         pCur->next = pPre;
    158         pPre = pCur;
    159         pCur = pTmp;
    160     }
    161     pHead->next->next = NULL;
    162     pHead->next = pPre;
    163 }
    164 
    165 int main() {
    166     int ret = 0;
    167     SList *node1 = NULL;
    168     ret = SList_Create(&node1);
    169     if(ret) {
    170         printf("create list erro
    ");
    171     }
    172     print_List(node1);
    173     printf("
     insert_List
    ");
    174     insert_List(node1, 20, 19);
    175     print_List(node1);
    176     printf("
     delete_List
    ");
    177     delete_List(node1, 19);
    178     print_List(node1);
    179     printf("
     reverse_List
    ");
    180     reverse_List(node1);
    181     print_List(node1);
    182     printf("
     destory_List
    ");
    183     destory_List(&node1);
    184     system("pause");
    185     return 0;
    186 }
  • 相关阅读:
    强制开启Android webview debug模式
    JavaScript DOM操作案例自定义属性的设置跟获取
    JavaScript innerText跟innerHTML的区别
    JavaScript DOM操作案例封装innerText跟textContent函数(浏览器兼容)
    JavaScript其他获取元素的方式
    JavaScript DOM操作案例根据类样式的名字获取元素
    JavaScript DOM操作案例根据name属性获取元素
    Java throws 使用
    理解 Android Build 系统
    理解Android编译命令
  • 原文地址:https://www.cnblogs.com/dengmj/p/5223670.html
Copyright © 2011-2022 走看看