数据结构线性链表类

头文件:

//////////////////////////////////////////////////////////////////////////
/*                   Author: bizhu12                                    */
/*                   Timer : 2011.07.02                                 */
/*                   编译环境: VS2008                                    */
//////////////////////////////////////////////////////////////////////////



//创建线性链表

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>

#ifndef List_H_
#define List_H_


struct ListNode
{
	int  Data;
	ListNode *pNext;
};


class List
{
public:
	List();
	ListNode*  CreateList(int);  //创建链表
	void       PrintList(ListNode *); //打印链表
	int        InsertNode(ListNode *,ListNode *,int); //插入节点成功返回1,否则0
	ListNode*  DeleteNode(ListNode *,int); //返回删除的节点,NULL为删除失败
	int        SortList(ListNode *);  //线性链表排序,简单的选择排序
	int        DestroyList(ListNode  *); //删除线性链表

private:
	int  NodeCount; //记录节点个数
};
#endif


 

 

 

 

 

 

Cpp文件:

 

// LinkList.cpp : 定义控制台应用程序的入口点。
//

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


List::List()
{
	NodeCount = 0; //初始化
}

//创建链表
ListNode* List::CreateList(int  count) //count是创建链表是需要指定节点个数
{
	ListNode * pHead = NULL;
        ListNode *p = new ListNode;       //分配内存
	memset(p,0,sizeof(ListNode));     //清空内存
	ListNode *pTemp = pHead = p;

	int  i = 0;
	cout << "输入" << count << "个数:" << endl;
	while(i < count)
	{
       //头结点数据域为空的链表   
	   p = new ListNode;
	   memset(p,0,sizeof(ListNode));
	   cin >> p->Data;
	   pTemp->pNext = p;
	   pTemp = p;
	   i++;
	}
	NodeCount = count;
	return pHead; //返回头结点
}


void List::PrintList(ListNode * pHead)
{
   if (pHead)
   { 
	   //头结点不为空
	   pHead = pHead->pNext;
	   cout <<endl <<"链表的值: ";
	   while(pHead)               //节点为空时结束
	   {   
		   cout << pHead->Data << "  ";
		   pHead = pHead->pNext;
	   }
	   cout << endl;
   }
   else
	   return;
}

//插入节点
int  List::InsertNode(ListNode *pHead,ListNode *Node,int Seat)
{
      //Node 为要插入的节点,Seat为插入的位置
     int  i = 1;
     if (pHead)   //判断头结点是否为空
     {   
	//判断插入的位置是否大于节点个数+1个;可以在最后插入,
	//但不能在最后的最后一个位置(NodeCount+2)
        if (Seat > NodeCount +1)
        {
	   return 0; //如果>= 节点个数+2
        }

		ListNode *p = pHead;
        
		//定位
		while(i < Seat)
		{
		  p = p->pNext;
		  i++;
		}
                //插入
		Node->pNext = p->pNext;
		p->pNext = Node;
		NodeCount++; //节点个数+1;
		return 1;
    }
	return 0;
}

//删除节点
ListNode * List::DeleteNode(ListNode *pHead,int Seat)
{
	
	if (pHead)
	{   
		int  i = 1;
		ListNode *pTemp = NULL;
                ListNode *p = pHead;
		if (Seat > NodeCount)
		{
			return NULL; //节点不存在则结束函数
		}
          
		//定位
		while(i < Seat)
		{
			p = p->pNext;
			i++;
		}

		//从链表中删除
		pTemp = p->pNext;
                p->pNext = pTemp->pNext;
		NodeCount--;    //节点个数减一
		return pTemp;   //返回删除的节点
	}
	return NULL;
}

//简单的选择排序,升序排序
int List::SortList(ListNode *pHead)
{
    if(pHead)
	{
		ListNode *p = pHead;
		ListNode *pTemp = NULL;
		ListNode *Temp2 = new ListNode;
		memset(Temp2,0,sizeof(ListNode));
                p = p->pNext;
		
		for (  ; p  ; p = p->pNext)
		{
			
		   for (pTemp = p->pNext;  pTemp ; pTemp = pTemp->pNext )
		  {
                      if (p->Data > pTemp->Data)
                       {
				   //数据域交换数据
                                   Temp2->Data = p->Data;
				   p->Data = pTemp->Data;
				   pTemp->Data = Temp2->Data;
                       }
		   }
		}
		return 1; //成功返回1
	}
	return 0; //否则0
}

//删除线性链表
int List::DestroyList(ListNode *pHead) 
{
	if (pHead)
	{
		ListNode *p = pHead;
		ListNode *pTemp = pHead;
		while(p)
		{
                  p = p->pNext;
		  delete(pTemp);
		  pTemp = p;
		}
                pHead = NULL;
		NodeCount = 0;
		return 1; //成功返回1
		
	}
	return 0; //失败返回0
}


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值