您的位置:首页 > 其它

0016单链表的完整功能及单链表翻转

2015-11-06 16:14 363 查看
首先是单链表节点的类,在命名为OnelinkNode.h的头文件里:

#ifndef OnelinkNode_H_
#define OnelinkNode_H_
class OnelinkNode
{
public:
int data;
OnelinkNode* next;
OnelinkNode(int k=0,OnelinkNode*nextNode=NULL)
{
data = k;
next = NULL;
}
~OnelinkNode()
{}
};

#endif//OnelinkNode_H_


再在另一个新的头文件Onelink.h中写以下代码:

#ifndef Onelink_H_
#define Onelink_H_
class Onelink
{
public:
OnelinkNode* head;
Onelink(int n=0);
~Onelink();
bool isEmpty()const
{
return head==NULL;
}
bool isFull()const
{
return false;  //总是不满
}

int length()const;
OnelinkNode* index(int i)const;//定位第i个节点
int get(int i)const;//获得第i个节点
bool set(int i,int k);//设置第i个节点的数据域
OnelinkNode* insert(OnelinkNode* p,int k);//将k插入到第

bool remove(OnelinkNode* p);
void output(OnelinkNode* p)const;
void output()const;

};

#endif//Onelink_H_


Onelink类中的功能函数的实现,在资源文件中新添加一个cpp文件,加入以下代码:

//本文档实现单链表类中的功能函数
#include <iostream>
#include"OnelinkNode.h"
#include "Onelink.h"
using namespace std;
//用构造函数来创建一个单链表
Onelink::Onelink(int n)
{
head=NULL;
if(n>0)
{
int i=1;
OnelinkNode *rear,*q;
head = new OnelinkNode(i++);
rear = head;
while(i<=n)
{
q = new OnelinkNode(i++);
rear->next = q;
rear = q;
}
}
}

//用析构函数来撤销单链表

Onelink::~Onelink()
{
OnelinkNode *p = head,*q;
while(p!=NULL)
{
q = p;
p = p->next;
delete q;
}

head = NULL;
}
//返回单链表的长度

int Onelink::length()const
{
int i=0;
OnelinkNode *p = head;
while(p!=NULL)
{
i++;
p=p->next;

}
return i;
}
//定位,返回的是一个节点指针
OnelinkNode* Onelink::index(int i)const
{
if(i<=0)return NULL;
int j=0;
OnelinkNode* p=head;
while(p!=NULL&&j<i)
{
j++;
p=p->next;
}
return p;
}
//设置单链表第i个节点的数据域数值
bool Onelink::set(int i,int k)
{
OnelinkNode* p=index(i);  //先定位
if (p!=NULL)
{
p->data=k;
return true;
}
else
return false;
}
//输出打印单链表,分两步,一部输出普通的节点,一步输出head为指针的单链表
void Onelink::output(OnelinkNode *p)const
{
while(p!=NULL)
{
cout<<p->data<<"  ";
p = p->next;
}
cout<<"\n";
}
//输出head指针指向的数据
void Onelink::output()const
{
cout<<"Onelink:    ";
output(head);
}

资源文件中的主函数里,我们用一个单链表翻转操作来部分检验以上所做的工作是否正确:

#include<iostream>
using namespace std;
#include "OnelinkNode.h"
#include "Onelink.h"

void reverse(Onelink &h)
{
OnelinkNode *p=h.head,*q,*front=NULL;
while(p!=NULL)
{
q=p->next;
p->next=front;
front = p;
p = q;
}
h.head=front;
}

void main(void)
{
Onelink h(5);
h.output();  //输出单链表
reverse(h);
cout<<"Reverse: \n";
h.output();

}
结果:



希望对初学者有帮助。2015年11月6日,西大楼。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: