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

来源:互联网 发布:公司网络维护 编辑:程序博客网 时间:2024/06/07 20:31

首先是单链表节点的类,在命名为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;}elsereturn 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日,西大楼。



0 0
原创粉丝点击