数据结构链表学习
今天初步学习数据结构链表,学习过程中感觉对于指针的理解还差很多,而且对于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 };
如此,一个简单的链表就实现了,功能只有简单的输出、删除和插入,只是练习用,因此插入和删除中并未进行任何的容错处理。