zoukankan      html  css  js  c++  java
  • 数据结构链表学习

      今天初步学习数据结构链表,学习过程中感觉对于指针的理解还差很多,而且对于VS的调试也不会使用,调查问题只能靠一遍一遍的梳理逻辑,效率不是一般的低下。。接下来得赶紧学习下VS的使用。。

      今天链表只是初步学习,写的例子也比较简单,如下: 

    定义链表的数据结构,只简单的定义了一个数据和一个指向后继的指针

    1 struct List {
    2     int num;
    3     List *next;
    4 };

    接下来就是链表的创建,返回一个指针地址赋给主函数中的头指针,用于之后的增删改查等等

     1 List *create(int n) {
     2     List *p = new List;
     3     p->next = NULL;
     4     for(int i=0;i<n;i++) {
     5         List *myList = new List;
     6         cin>>myList->num;
     7         myList->next = p->next;
     8         p->next = myList;
     9     };
    10     return p->next;
    11 };

    然后是删除、插入以及输出函数,不在赘述:

     1 void print(List *p,int n) {
     2     for (int i=0;i<n;i++) {
     3         cout<<p->num<<endl;
     4         p = p->next;
     5     }
     6 };
     7 
     8 List *del(List *p,int n,int delNum) {
     9     List *first = p;
    10     List *previous;
    11     for (int i=0;i<n;i++) {
    12         if(p->num == delNum) {
    13             if (i == 0) {
    14                 first = p->next;
    15                 break;
    16             } else {
    17                 previous->next = p->next;
    18                 break;
    19             }
    20         } else {
    21             previous = p;
    22             p = p->next;
    23         }
    24     }
    25     return first;
    26 };
    27 
    28 List *insert(List *p,int n,int insNum,List *insList) {
    29     List *first = p;
    30     for (int i=0;i<n;i++) {
    31         if(p->num == insNum) {
    32             insList->next = p->next;
    33             p->next = insList;
    34             break;
    35         } else {
    36             p = p->next;
    37         }
    38     }
    39     return first;
    40 };

    最后是我们的main函数:

     1 typedef int INTER;
     2 int main() {
     3     List *create(INTER);
     4     void print(List *,INTER);
     5     List *del(List *,INTER,INTER);
     6     List *insert(List *,INTER,INTER,List *);
     7     cout<<"List Study ---------> List create."<<endl;
     8     List *first = NULL;
     9     INTER n = 5;
    10     first = create(n);
    11     print(first,n);
    12     cout<<"List Study ---------> List delete."<<endl;
    13     INTER delNum;
    14     cin>>delNum;
    15     first = del(first,n,delNum);
    16     n--;
    17     print(first,n);
    18     cout<<"List Study ---------> List insert."<<endl;
    19     INTER insNum;
    20     cin>>insNum;
    21     List insList = {15,NULL};
    22     first = insert(first,n,insNum,&insList);
    23     n++;
    24     print(first,n);
    25     cout<<"List Study ---------> List end."<<endl;
    26     system("pause");
    27     return 0;
    28 };

    如此,一个简单的链表就实现了,功能只有简单的输出、删除和插入,只是练习用,因此插入和删除中并未进行任何的容错处理。

  • 相关阅读:
    NOI 模拟赛
    bzoj 4998 星球联盟
    bzoj 4545 DQS 的 Trie
    loj #161 子集卷积
    bzoj 5093 图的价值
    bzoj 4299 Codechef FRBSUM
    NOI 模拟赛
    WC2018 州区划分
    CSP 2020 T2 动物园
    CSP 2020 T1 儒略日
  • 原文地址:https://www.cnblogs.com/DARKDD/p/3705824.html
Copyright © 2011-2022 走看看