博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据结构初试 简单链表操作

Posted on 2007-04-02 22:26  Hafeyang  阅读(662)  评论(1编辑  收藏  举报

只是罗列代码,大家都看的懂

 1//Node.h
 2//By Hafeyang 
 3//该程序实现一个节点类
 4//  
 5//头文件部分
 6#include <string>
 7#include <iostream>
 8#define null 0
 9using namespace std;
10
11//类Node的实现
12class Node
13{
14    //属性
15public:
16    string Data;  //声名数据为字符串
17    Node * Next;  //指向下一个节点
18
19    //方法及其实现
20public:
21    Node(string data,Node * next)  //构造函数1
22    {
23        this->Data=data;
24        this->Next=next;
25    }

26
27    Node()    //构造函数2
28    {
29        this->Data="";
30        this->Next=null;
31    }
 
32    ~Node()  //析造函数
33    {
34        //cout<<"Node "<<Data<<"Disposed"<<endl;
35    }

36    Dispose()   //自定义释放内存函数 ?????
37    {
38        this->Data="";
39        this->Next=null;
40    }

41}
;
42
43
  1//List .h
  2//By Hafeyang
  3//该类实现类链表
  4#include "Node.h"
  5class List
  6{
  7    //属性
  8public:
  9    Node * Head;  //头节点指针
 10    int Length;  //List长度
 11
 12    //方法
 13    List()
 14    {
 15        Length=0;
 16        Head=null;
 17    }

 18public:
 19    int  AppendNode(Node * newNode)  //在链表的为部添加节点
 20    {
 21        try
 22        {
 23            if(Length==0)  //长度为零添加第一个节点
 24            {
 25                Head=newNode;
 26                Head->Next=null;
 27            }

 28            else   //在链表尾部添加节点
 29            {
 30                Node * temp;
 31                temp=Head;
 32                while(temp->Next!=null)
 33                {
 34                    temp=temp->Next;
 35                }

 36                temp->Next=newNode;
 37                newNode->Next=null;
 38            }

 39        }

 40        catch()
 41        {
 42            cout<<"Append Node "<<newNode->Data<<" Failed!"<<endl;
 43            return 0;  //返回0  插入失败
 44        }

 45        Length++;
 46        cout<<"Append Node "<<newNode->Data<<" Seccessfully!"<<endl;
 47        return 1;  //返回1  插入成功
 48    }

 49
 50    void PrintList()   //输出所有节点数据
 51    {
 52        Node * temp=Head;
 53        cout<<endl;
 54        cout<<"********Print The List Start********"<<endl;
 55        while(temp!=null)
 56        {
 57            cout<<"Node Data:"<<temp->Data<<endl;
 58            temp=temp->Next;
 59        }

 60        cout<<"The Length of the List:"<<Length<<endl;
 61        cout<<"********Print The List End**********"<<endl;
 62        cout<<endl;
 63    }

 64
 65
 66    int DeleteNode(Node * deleteNode)
 67    {
 68        Node * temp=Head;
 69
 70        
 71        if(Head==deleteNode)  //删除头节点
 72        {
 73            return deleteHead();
 74        }

 75
 76
 77        while(temp!=null)
 78        {
 79            if(temp->Next==deleteNode)
 80            {
 81                break;   //找到deleteNode 的前一个节点
 82            }

 83            temp=temp->Next;
 84        }

 85
 86        if(temp==null)  //没有找到该节点
 87        {
 88            cout<<" Node"<<deleteNode->Data<<" does not exist!"<<endl;
 89            return 0;  //删除失败 返回0
 90        }

 91        //此时temp 为deleteNode 的前一个节点
 92        temp->Next=deleteNode->Next;
 93
 94        
 95        cout<<"Delete Node "<<deleteNode->Data<<" Seccessfully!"<<endl;
 96
 97        deleteNode->~Node();  //调用析构函数 释放节点
 98        Length--;
 99        return 1;
100    }

101
102    int deleteHead()
103    {
104        try
105        {
106            Head=Head->Next;
107            cout<<"Delete Head Seccessfully!"<<endl;
108            Length--;
109
110            if(Head!=null)
111            {
112                Head->~Node(); //调用析构函数 释放节点
113            }

114
115            return 1;
116        }

117        catch()
118        {
119            cout<<"Delete Head Failed"<<endl;
120            return 0;
121        }

122    }

123}
;
 1
 2#include "List.h"
 3 void main()
 4 {
 5     Node newNode1=Node("NodeData1",null);//声名 节点
 6     Node newNode2=Node("NodeData2",null);
 7     Node newNode3=Node("NodeData3",null);
 8     List newList=List();   //声明 链表
 9
10     newList.AppendNode(&newNode1);
11     newList.AppendNode(&newNode2);
12     newList.AppendNode(&newNode3);
13     newList.PrintList();
14
15     newList.DeleteNode(&newNode3);
16     newList.PrintList();
17
18
19     newList.DeleteNode(&newNode2);
20     newList.PrintList();
21
22     newList.DeleteNode(&newNode1);
23     newList.PrintList();
24     char a;
25     cin>>a;
26 }