• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
SmallCroco
博客园    首页    新随笔    联系   管理    订阅  订阅

单链表

单链表的创建有两种方法:

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; 最后删除当前节点。

posted @ 2015-08-13 14:40  SmallCroco  阅读(173)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3