线性表的链式描述

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

#include "stdafx.h"
#include<iostream>
using namespace std;
typedef int ElemType;
struct Node{
	ElemType element;
	Node * next;
	Node(ElemType element);//用来初始化过度的Node
	Node();//用来初始化刚开始的那个Node
};
Node::Node(ElemType ele) {
	element = ele;
	next = NULL;
}
Node::Node() {
	next = NULL;
}

class circularList {
private: 
	Node *at_head;//相对于线性表来讲,这个表的元素有两个(一个是用来记录第几个一个用来记录位置)有点抽象了而不像那个线性表相当于一个数组直接定位这个的定位是另一种方式。。。。感觉没有到位,应该是另一种的方式不过相对于线性表的格式是完全相同的,只不过查询的方式变了,因为这样完全是靠指针依次往下找的,在class中定义一个这样的*Node是为了将整个东西链接起来,反过来讲at_head贯穿了整个的链式表因为插入的时候……
	int date;
public:
	circularList();
	~circularList();
	bool GetElem(int i, ElemType &elem);
	bool InsertBetween(int i, ElemType elem);
	bool InsertAfterHead(ElemType elem);
	bool DeleteNode(int i, ElemType &elem);
	ElemType GetListLength();
	void * GetHead();
	bool DestroyLinklist();
		 
};

int main()
{
	circularList list1;
	list1.InsertAfterHead(1);
	list1.InsertAfterHead(2);
	list1.InsertAfterHead(3);
	list1.InsertAfterHead(4);
	list1.InsertAfterHead(5);
	list1.InsertAfterHead(6);
	list1.InsertAfterHead(7);
	list1.InsertAfterHead(8);
	int elementlist1;
	for (int i = 1; i <= 10; i++)
	{
		list1.GetElem(i, elementlist1);
		cout << elementlist1 << endl;
	}
    return 0;
}
circularList::circularList() {
	at_head = new Node();
	date = 0;
	at_head->next = at_head;
}
bool circularList::InsertAfterHead(ElemType elem) {
	if (date==0)//这个十分重要因为最初初始化的时候并没有值所以date的值为0,并且头结点并没有指向那个值因为根本就没有
	{
		at_head->element = elem;
		date++;
	}
	else{
	Node *p = new Node(elem);
	date++;
	 p->next = at_head->next;
	at_head->next = p;}
	return true;
}
bool circularList::GetElem(int i, ElemType &elem) {
	int j = 1;
	Node *p = at_head->next;
	while (j<i)
	{
		p = p->next;
		++j;
	}
	if (p == NULL || j>i)
	{
		return false;

	}
	elem = p->element;
	return true;
}

circularList::~circularList() {}


猜你喜欢

转载自blog.csdn.net/zhuofai_/article/details/79656913