2. 单链表

 

// LinkSeqList.h
#include <iostream>
#include <cstring>

using namespace std;

struct node{
	int data1;
	char data2[10];
	node *next;
};

typedef node* ptrN;

class CLinkSeqList{
public:
	CLinkSeqList():
	head(NULL),
	p1(NULL),
	p2(NULL),	
	a(0),
	m_length(0),
	m_count(0)
	{
		char *ch = new char[20];
		cout <<"input -1 to exit : ";
		while(1){
			cin >>a;
			if (a == -1) break;
			cin >> ch;
			p1 = new node;
			m_length++;
			p1->data1 = a;
			strcpy(p1->data2, ch);
			if (head == NULL)
			{
				head = p1;
				p2 = p1;
			}
			else
			{	
				p2->next = p1;
				p2 = p1;
			}
		}
		if (head) p2->next = NULL;
		delete ch;
	}
	void outputNodesl()
	{
		ptrN nodeN;
		int i = 1;
		nodeN = head;
		while (nodeN)
		{
			cout << i << "  Node :" << nodeN->data1 <<'\t'<<nodeN->data2 <<endl;
			nodeN= nodeN->next;
			i++; 
		}
	}

	ptrN accessNode(int n)
	{
		ptrN tmpNode;
		if (head == NULL)
			return NULL;
		else
		{
			tmpNode = head;
		}
		
		for (m_count = 0; m_count <n-1; m_count++){
			if( tmpNode->next == NULL)
				return NULL;
			tmpNode = tmpNode->next;
		}
		return tmpNode;
	}


	ptrN accessTrail()
	{
		ptrN tmpNode;
		if (head == NULL)
			return NULL;
		else
		{
			tmpNode = head;			
		}
		while (tmpNode->next)
		{
			tmpNode = tmpNode->next;			
		}

		return tmpNode;
	}

	bool insertNode(ptrN newNode, int n)
	{
		ptrN pPre, pBac;
		if (head == NULL){
			head = newNode;
			head->next = NULL;
		}
		else if (n == 1){
			pBac = head;
			head = newNode;
			head->next = pBac;
		}
       		else{
			pPre = accessNode(n-1);
			if (pPre && pPre->next ){
				pBac = pPre->next;
				pPre->next = newNode;
				newNode->next = pBac;
			}
			else if (pPre &&pPre->next == NULL){
				pPre = accessTrail();
				pPre->next = newNode;
				newNode->next = NULL;				
			}
                        else
                                return false;
		}                 
                return true;
	}


	bool deleteNode(int n){
		ptrN pCur, pPre, pBac;
		if (head == NULL){
			return false;
		}	
 		else if (n == 1){
			pCur = head;
			head = head->next;
			delete pCur; 
		}
		else{
			pCur = accessNode(n);
			if (pCur && pCur->next){
				pPre = accessNode(n-1);
				pBac = (pPre->next)->next;
				pPre->next = pBac;
				delete pCur;
			}
			else if (pCur&& pCur->next == NULL){
				pPre = accessNode(n-1);
				pPre->next = NULL;
				delete pCur;
			}
			else if (pCur==NULL)
			{
				cout <<"There is no Node to delete in sequence link list"<<endl;
				return false;
			}
		}
		return true;
	}


	~CLinkSeqList()
	{	
		ptrN tmpNode;	
		while (head)
		{
			tmpNode = head;
			head = head->next;
			delete tmpNode;
		}
		cout<<"clear all Nodes in Sequence list"<<endl;
	}

	int Length() {return m_length;}
private:	
	ptrN p1, p2, head;
	int a;
	int m_length;
	int m_count;
};

 

// Test_LinkSeqList.cpp

#include <iostream>
#include <cstring>
#include "LinkSeqList.h"


using namespace std;

int main()
{
	cout << " Create Non Seqenced Link List :"<<endl;
	CLinkSeqList list;
	cout << " CLinkSeqList Max Lenght = " << list.Length() <<endl; 
	cout <<"output all nodes in link list:"<<endl;
	list.outputNodesl();
	cin.get();
	cout <<"Insert a node"<<endl;
	ptrN tmpNode = new node;
	tmpNode->data1 = 5;
	strcpy(tmpNode->data2, "Insert Node");
	list.insertNode(tmpNode, 3); 
	cout <<"output all nodes in link list:"<<endl;
	list.outputNodesl();
	cin.get();
	cout << "delete 2nd node"<<endl;
	list.deleteNode(2);
	cout <<"output all nodes in link list:"<<endl;
	list.outputNodesl();

        return 0;
}

  Create Non Seqenced Link List :
input -1 to exit : 10 China
20 Korea
30 American
40 France
50 German
-1
 CLinkSeqList Max Lenght = 5
output all nodes in link list:
1  Node :10    China
2  Node :20    Korea
3  Node :30    American
4  Node :40    France
5  Node :50    German
Insert a node
output all nodes in link list:
1  Node :10    China
2  Node :20    Korea
3  Node :5    Insert Node
4  Node :30    American
5  Node :40    France
6  Node :50    German

delete 2nd node
output all nodes in link list:
1  Node :10    China
2  Node :5    Insert Node
3  Node :30    American
4  Node :40    France
5  Node :50    German
clear all Nodes in Sequence list

posted @ 2017-03-14 19:59  souwang  阅读(125)  评论(0编辑  收藏  举报