码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 动态链表

时间:2017-05-01 20:50:34      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:ini   turn   初始化   创建   display   div   next   链表   长度   

C++ 动态链表 用类写的

头文件代码:

技术分享
  1 #include<iostream>
  2 #include<string>
  3 //动态创建链表
  4 using namespace std;
  5 class LNode {
  6 private:
  7     string StudentNum;
  8     string Name;
  9     int age;
 10     LNode *next;
 11 public:
 12     LNode() {}//构造函数
 13     ~LNode() {}//析构函数
 14     void Init(LNode **L);
 15     int GetLen(LNode *L);//得到链表长度
 16     void InsertElem(LNode *L,int i,string sn,string nm,int age);//插入 
 17     void DeleteElem(LNode *L,int i);//删除
 18     void show(LNode *L);//显示
 19     void destory(LNode *L);
 20 };
 21 void LNode::Init(LNode **L)
 22 {
 23     *L = new LNode();
 24     (*L)->next = NULL;
 25 }
 26 int  LNode::GetLen(LNode *L)
 27 {
 28     LNode *p = L;
 29     int num=0;
 30     while (p != NULL)
 31     {
 32         p = p->next;
 33         num++;
 34     }
 35     return num;
 36 }
 37 void LNode::InsertElem(LNode *L,int i,string sn,string nm,int age)
 38 {
 39     //判断插入的有效性
 40     if (i<1 || i>GetLen(L) + 1)
 41     {
 42         cout << "无效插入\n";
 43         return;
 44     }
 45     LNode *p=NULL, *q=NULL, *s;
 46     s = new LNode();
 47     s->StudentNum = sn;
 48     s->Name = nm;
 49     s->age = age;
 50     
 51     q = L;
 52     int pos = 0;
 53     while (pos <i)
 54     {
 55         p = q; q = q->next;
 56         pos++;
 57     }
 58     s->next = q;
 59     p->next = s;
 60     
 61 }//插入 在第i个结点之前插入
 62 void LNode::DeleteElem(LNode *L, int i)
 63 {
 64     //判断删除的有效性
 65     if (i < 1 || i > GetLen(L))
 66     {
 67         cout << "删除无效\n";
 68         return;
 69     }
 70     LNode *p = NULL, *q = NULL;
 71     q = L;
 72     int pos = 0;
 73     while (pos < i)
 74     {
 75         p = q; q = q->next;
 76         pos++;
 77     }
 78     p->next = q->next;
 79     delete q;
 80 }//删除第i个节点
 81 void LNode ::show(LNode *L)
 82 {
 83     LNode *p = L->next;
 84     while (p != NULL)
 85     {
 86         cout << "*************************************" << endl;
 87         cout << "学生学号:" << p->StudentNum << endl;
 88         cout << "学生姓名:" << p->Name << endl;
 89         cout << "学生年龄:" << p->age << endl;
 90         cout << "*************************************" << endl;
 91         p = p->next;
 92     }
 93     
 94 }
 95 void LNode::destory(LNode *L)
 96 {
 97     LNode *p = NULL, *tem = NULL;
 98     p = L;
 99     while (p != NULL)
100     {
101         tem = p;
102         p = p->next;
103         delete tem;
104     }
105 }//销毁每一个节点
View Code

带头结点的单链表重点理解:

1.初始化传入的是头指针的地址

2.插入删除 指针的变化

C++ 动态链表

标签:ini   turn   初始化   创建   display   div   next   链表   长度   

原文地址:http://www.cnblogs.com/zlspace/p/6792571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!