C++链表基本操作

LinearList.cpp

  1 /*
  2     458043535@qq.com
  3     xxdfly
  4 */
  5 #include "LinearList.h"
  6 
  7 //构造函数
  8 LinearList::LinearList()
  9 {
 10     head = (Node*)malloc(sizeof(Node));
 11     head->next=0;
 12 }
 13 
 14 //返回链表长度
 15 int LinearList::ListLength()
 16 {
 17     Node *p;
 18     int length=0;
 19     p=head->next;
 20     while(p)
 21     {
 22         p=p->next;
 23         length++;
 24     }
 25     return length;
 26 }
 27 
 28 //判断链表是否为空,若为空返回true,否则返回false
 29 bool LinearList::EmptyList()
 30 {
 31     if(head->next==0)
 32         return true;
 33     else
 34         return false;
 35 }
 36 
 37 //打印链表
 38 LinearList::ShowList()
 39 {
 40     Node *p=head->next;
 41     while(p)
 42     {
 43         cout << p->data << "\t";
 44         p=p->next;
 45     }
 46     cout << endl;
 47 }
 48 
 49 //在链表i位置上插入元素e
 50 LinearList::InserList(int i,int e)
 51 {
 52     int length=ListLength();
 53 
 54     if(i<1||i>length+1)
 55     {
 56         cout << "insert location parameter is illegal" << endl;
 57     }
 58     else
 59     {
 60         int count=1;
 61         Node *p,*q;
 62         Node *elem=new Node;
 63         
 64         p=q=head;
 65         elem->data=e;
 66         elem->next=0;
 67         
 68         while(count<=length+1)
 69         {
 70             if(count==i)
 71             {
 72                 elem->next=p->next;
 73                 q->next=elem;
 74                 break;
 75             }
 76 
 77             p=q=q->next;
 78             count++;
 79         }
 80     }
 81 }
 82 
 83 //删除链表i位置上的元素
 84 LinearList::DeletList(int i)
 85 {
 86     int length=ListLength();
 87 
 88     if(i<1||i>length+1)
 89     {
 90         cout << "delete location parameter is illegal" << endl;
 91     }
 92     else
 93     {
 94         int count=1;
 95         Node *p,*q;
 96         p=q=head;
 97         while(count<=length+1)
 98         {
 99             if(count==i)
100             {
101                 q->next=p->next->next;
102                 break;
103             }
104             q=p=p->next;
105             count++;
106         }
107     }
108 }
109 
110 //获取链表i位置上的数据
111 int LinearList::GetData(int i)
112 {
113     int length=ListLength();
114     int result;
115     if(i<1||i>length)
116     {
117         cout << "delete location parameter is illegal" << endl;
118     }
119     else
120     {
121         int count=0;
122         Node *p=head;
123         while(count<=length)
124         {
125             if(count==i)
126             {
127                 result=p->data;
128                 break;
129             }
130             p=p->next;
131             count++;
132         }
133     }
134     return result;
135 }
136 
137 //将链表置空
138 LinearList::ClearList()
139 {
140     head->next=0;
141 }
142 
143 //获取包含e元素的节点(只寻找第一个)
144 Node* LinearList::Locate(int e)
145 {
146     Node *elem=0;
147     Node *p=head->next;
148     while(p)
149     {
150         if(e==p->data)
151         {
152             elem=p;
153             break;    
154         }
155         p=p->next;
156     }
157     return elem;
158 }
159 
160 //销毁链表
161 LinearList::~LinearList()
162 {
163     if(head)
164         delete []head;
165     cout << "the nodelist is destroyed" << endl;
166 }

LinearList.h

 1 #include <iostream>
 2 using namespace std;
 3 
 4 struct Node
 5 {
 6     int data;
 7     Node *next;
 8 };
 9 
10 class LinearList
11 {
12     public:
13         Node *head;
14     public:
15         LinearList();
16         ~LinearList();
17         InserList(int i,int e);
18         DeletList(int i);
19         DestroyList();
20         ClearList();
21         ShowList();
22 
23         int ListLength();
24         int GetData(int i);
25 
26         Node* Locate(int e);
27         bool EmptyList();
28 };

main.cpp

 1 #include "LinearList.h"
 2 
 3 int main(int argc, char* argv[])
 4 {
 5     Node* node=new Node;
 6     LinearList *list=new LinearList;
 7 
 8     cout << list->head << endl;
 9     cout << list << endl;
10 
11     cout << list->EmptyList() << endl;
12     cout << list->ListLength() << endl;
13     
14     int data1=23;
15 
16     list->InserList(1,data1);
17     list->ShowList();
18     list->InserList(2,520);
19     list->InserList(3,1314);
20     list->ShowList();
21 
22     Node *e = list->Locate(1314);
23     cout << e->data << "\t" << "&e=" << e << "\te->next=" << e->next << endl;
24     int a=list->GetData(2);
25     cout << "a=" << a << endl;
26 
27     list->DeletList(2);
28     list->ShowList();
29 
30     list->ClearList();
31     list->ShowList();
32     delete list;
33     list->head;
34     cout << list->head << endl;
35     cout << list << endl;
36     return 0;
37 }

 

转载于:https://www.cnblogs.com/xxdfly/p/4374335.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值