单链表
单链表的创建有两种方法:
1.从头部插入
例如 header = new node;
newnode = new node;
newnode->next = header;
header = newnode;
这样插入的数据是最后插入的节点在最前面,最先插入的节点在最后面,实例如下:
1 /* 2 * ch03_03.cpp 3 * 建立5个学生成绩的单链表,并遍历每一个结点来输出成绩 4 */ 5 6 #include <iostream> 7 8 using namespace std; 9 10 class student { 11 public: 12 int num; // 座号 13 int score; // 成绩 14 char name[10]; // 姓名 15 class student *next; // 指针,指向下一个结点 16 }; 17 18 typedef class student node; 19 typedef node *link; 20 21 int main() { 22 23 link header = new node; 24 if (header == NULL) { 25 cout << "Memory Initialize Failed"<<endl; 26 return 1; 27 } 28 cout<<"Input Seat Num:"; 29 cin>>header->num; 30 cout<<"Input Name:"; 31 cin>>header->name; 32 cout<<"Input Score:"; 33 cin>>header->score; 34 header->next = NULL; 35 36 for (int i = 1; i < 5; i++) { 37 link newnode = new node; 38 if (newnode == NULL) { 39 cout << "Memory initialize failed"<<endl; 40 return 1; 41 } 42 cout<<"Input Seat Num:"; 43 cin>>newnode->num; 44 cout<<"Input Name:"; 45 cin>>newnode->name; 46 cout<<"Input Score:"; 47 cin>>newnode->score; 48 newnode->next = header; 49 header = newnode; 50 } 51 52 cout<<" \n Student Information"<<endl; 53 cout<<" Seat Num\tName\tScore\n======================================="<<endl; 54 link ptr = header; 55 while (ptr != NULL) { 56 cout<<ptr->num<<"\t"<<ptr->name<<"\t"<<ptr->score<<endl; 57 header = ptr; 58 ptr = ptr->next; 59 delete header; 60 } 61 return 0; 62 }
2.从尾部插入
例如: header = new node;
ptr = header;
newnode = new node;
ptr->next = newnode;
ptr = newnode;
这样插入的节点是先插入的在最前面,最后插入的在最后面,实例如下:
1 #include <iostream> 2 3 class student { 4 public: 5 int num; 6 int score; 7 char name[10]; 8 class student *next; 9 }; 10 11 using namespace std; 12 13 typedef class student node; 14 typedef node *link; 15 16 int main() { 17 link list = new node; 18 if (list == NULL) { 19 cout<<"Memory Initialize Failed"<<endl; 20 return 1; 21 } 22 cout<<"Input Seat Num:"; 23 cin>>list->num; 24 cout<<"Input Name:"; 25 cin>>list->name; 26 cout<<"Input Score:"; 27 cin>>list->score; 28 list->next = NULL; 29 30 link ptr = list; 31 32 for(int i = 1; i < 5; i ++) { 33 link newnode = new node; 34 if (newnode == NULL) { 35 cout<<"Memory Initialize Failed"<<endl; 36 return 1; 37 } 38 cout<<"Input Seat Num:"; 39 cin>>newnode->num; 40 cout<<"Input Name:"; 41 cin>>newnode->name; 42 cout<<"Input Score:"; 43 cin>>newnode->score; 44 newnode->next = NULL; 45 ptr->next = newnode; 46 ptr = newnode; 47 } 48 49 cout<<"\n Student Information"<<endl; 50 cout<<" Seat Num\tName\tScore\n===================================="<<endl; 51 52 ptr = list; 53 while (ptr != NULL) { 54 cout<<ptr->num<<"\t"<<ptr->name<<"\t"<<ptr->score<<endl; 55 list = ptr; 56 ptr = ptr->next; 57 delete list; 58 } 59 return 0; 60 }
单链表的遍历:
指向链表头 ptr = header; 输入ptr节点信息, 然后链表头指向当前节点header = ptr,当前节点指向下一个节点 ptr = ptr->next; 最后删除当前节点。