zoukankan      html  css  js  c++  java
  • [c/c++] C数据结构: 链表 Linked List

      1 #include "stdio.h"
      2 #include "stdlib.h"
      3 
      4 typedef int ElemType;
      5 
      6 typedef struct node {
      7     ElemType data;
      8     struct node *next;
      9 } *LNode, *LinkList;
     10 
     11 // 初始化一个链表
     12 LinkList
     13 initLinkList(int n) {
     14     LinkList list = NULL;
     15     ElemType e;
     16     LNode p,r;
     17 
     18     int i;
     19     for(i = 1; i <= n; i++) {
     20         scanf("%d",&e);
     21         p = (LinkList) malloc(sizeof(LNode));
     22         p->data = e;
     23         p->next = NULL;
     24         if(!list) list = p;
     25         else r->next = p;
     26         r = p; // 下一个节点
     27     }
     28 
     29     return list; // 返回链表头指针
     30 }
     31 
     32 // 打印链表
     33 void
     34 printLinkList(LinkList *L) {
     35     while(*L) {
     36         printf("%d ",(*L)->data);
     37         (*L) = (*L)->next;
     38     }
     39     printf("\n");
     40 }
     41 
     42 // 向链表插入结点
     43 void
     44 insertLinkListNode(LinkList *list,LNode insertNode,ElemType item) {
     45     LinkList newNode;
     46     newNode = (LNode) malloc(sizeof(LNode));
     47     newNode->data = item;
     48     if(!*list) {
     49         *list = newNode;
     50         newNode->next = NULL;
     51     } else {
     52         // 从1个位置开始向后插入? 
     53         newNode->next    = insertNode->next; // 插入点
     54         insertNode->next = newNode;
     55         // 插入到开始位置 测试一下 有段错误 可能问题在main
     56         //*list = newNode;
     57         //newNode->next = insertNode;
     58     }
     59 }
     60 
     61 // 删除链表的指定结点
     62 void deleteLinkListNode(LinkList *list,LNode deleteNode) {
     63     LNode currentNode;
     64     if(deleteNode == *list) { // 第一个节点
     65         *list = deleteNode->next;
     66         free(deleteNode);
     67     } else {
     68         for(currentNode = *list; currentNode->next != deleteNode; currentNode = currentNode->next);
     69         if(currentNode->next != NULL) { // ? 
     70             currentNode->next = deleteNode->next;
     71             free(deleteNode);
     72         }
     73     }
     74 }
     75 
     76 // 销毁一个链表
     77 void destroyLinkList(LinkList *list) {
     78     LNode currentNode,nextNode;
     79     currentNode = *list;
     80     while(currentNode) {
     81         nextNode = currentNode->next;
     82         free(currentNode);
     83         currentNode = nextNode;
     84     }
     85     *list = NULL;
     86 }
     87 
     88 int
     89 main() {
     90     int i;
     91     ElemType item;
     92     LinkList mainList;
     93     LNode    currentNode;
     94 
     95     // 初始化链表 initLinkList(0) 可以生成一个空的链表
     96     mainList    = initLinkList(2);
     97     currentNode = mainList;
     98     printf("the current linklist:\n");
     99     printLinkList(&currentNode);
    100    
    101     currentNode = mainList;
    102     // 向链表中插入很多数据 0停止
    103     scanf("%d",&item);
    104     while(item) {
    105         insertLinkListNode(&mainList,currentNode,item);
    106         currentNode = currentNode->next;
    107         scanf("%d",&item);
    108     }
    109     currentNode = mainList;
    110 
    111     printf("After insert the current linklist:\n");
    112     printLinkList(&currentNode);
    113 
    114     // 删除
    115     currentNode = mainList;
    116     printf("delete the third item\n");
    117     for(i = 0;i < 2; i++) {
    118         currentNode = currentNode->next;
    119     }
    120     printf("%d\n",currentNode->data);
    121     deleteLinkListNode(&mainList,currentNode);
    122     currentNode = mainList;
    123     printLinkList(&currentNode);
    124 
    125     // 销毁链表
    126     destroyLinkList(&mainList);
    127 
    128     exit(0);
    129 }

    对于指针的使用 还是头很大哈...

  • 相关阅读:
    OpenCV-Python 霍夫直线检测-HoughLinesP函数参数
    2017 年度读书总结
    检查服务是否正在运行,如果未运行则启动
    添加MIME类型
    IIS功能查看、配置
    IIS下的身份验证方式管理
    PowerShell管理IIS(新建站点、应用程序池、应用程序、虚拟目录等)
    虚拟目录和应用程序的区别
    远程重启服务器
    逐行读取txt
  • 原文地址:https://www.cnblogs.com/bluefrog/p/2633248.html
Copyright © 2011-2022 走看看