首页 > 代码库 > 数据结构链表学习

数据结构链表学习

  今天初步学习数据结构链表,学习过程中感觉对于指针的理解还差很多,而且对于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 };

 

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