单链表循环链表多项式及其相加双向链表稀疏矩阵(参考课件)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// obtain the address of the next node
Node<T> *NextNode(void) const; };
5
// constructor. initialize data and // pointer members
template <class T>
Node<T>::Node(const T& item, Node<T>* ptrnext) : data(item), next(ptrnext))
// return the pointer to the unlinked node return tempPtr;
}
9
2.人工建立一个链表
void main(void) { Node<char>*a,*b,*c; a=new Node<char>('a');
b=new Node<char>('b'); c=new Node<char>('c'); Node<char>*head,*p; head=new Node<char>(' '); p=head; head->InsertAfter(a); head->InsertAfter(b); head->InsertAfter(c); while(p!=NULL) { cout << p->data<<" ";
8
// delete the node following current and return its address
template <class T> Node<T>* Node<T>::DeleteAfter(void) { // save address of node to be deleted
Node<T>* tempPtr = next; // if there isn't a successor, return NULL
if (next == NULL) return NULL;
// current node points to successor of tempPtr. next = tempPtr->next;
几个结点,前一个结点的指针, 指向后一个结点,就连接成一个 线性链表。
线性链表的优点则是插入,删除 快捷,缺点是选取复杂。
4
1. 结点类的定义
#include <stdlib.h〉 #include <iostream.h> template <class T> class Node { Node<T> *next; //next 是下一个结点的地址
template <class T> void Node<T>::InsertAfter(Node<T> *p) {
// p points to successor of the current // node, and current node points to p.
p->next = next; next = p; }
{ Node<T> *newNode;
// allocate memory while passing item and NextPtr to
// constructor. terminate program if allocation fails
newNode = new Node<T>(item, nextPtr);
if (newNode == NULL)
{ cerr << "Memory allocation failure!" << endl;
exit(1); }
return newNode;
}
11
enum AppendNewline {noNewline, addNewline}; template <class T> // print a linked list void PrintList (Node<T> *head,
p=p->NextNode( ); } } 测试结果:打印 c b a
10
3. 定义线性链表的一些操作
#include "node.h"
// allocate a node with data member item and pointer nextPtr
template <class T>
Node<T>*GetNode(constT&item,Node<T>*nextPtr = NULL)
if(addnl == addNewline) cout << currPtr->data << endl;
{}
6
// return value of private member next
template <class T>
Node<T>* Node<T>::NextNode(void) const
{ return next;
}
7Leabharlann Baidu
// insert a node p after the current one
public: T data; // the data is public
Node(const T& item, Node<T>* ptrnext=NULL);
// list modification methods
void InsertAfter(Node<T> *p); Node<T> * DeleteAfter(void);
单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵
1
一、单链表
2
线性表的链式表示
顺序表的优点是可以随机选取表中元素 缺点是插入删除操作复杂。 用指针将互不相连的内存结点串成的 线性表叫线性链表。 结点 node 由一个数据元素域,一个或几个 指针域组成。单链表的结点只有一个指针域。
3
AppendNewline addnl = noNewline ) { // currPtr chains through the list, starting at head
Node<T> *currPtr = head; // print the current node's data until end of list while(currPtr != NULL) { // output newline if addl == addNewline
Node<T> *NextNode(void) const; };
5
// constructor. initialize data and // pointer members
template <class T>
Node<T>::Node(const T& item, Node<T>* ptrnext) : data(item), next(ptrnext))
// return the pointer to the unlinked node return tempPtr;
}
9
2.人工建立一个链表
void main(void) { Node<char>*a,*b,*c; a=new Node<char>('a');
b=new Node<char>('b'); c=new Node<char>('c'); Node<char>*head,*p; head=new Node<char>(' '); p=head; head->InsertAfter(a); head->InsertAfter(b); head->InsertAfter(c); while(p!=NULL) { cout << p->data<<" ";
8
// delete the node following current and return its address
template <class T> Node<T>* Node<T>::DeleteAfter(void) { // save address of node to be deleted
Node<T>* tempPtr = next; // if there isn't a successor, return NULL
if (next == NULL) return NULL;
// current node points to successor of tempPtr. next = tempPtr->next;
几个结点,前一个结点的指针, 指向后一个结点,就连接成一个 线性链表。
线性链表的优点则是插入,删除 快捷,缺点是选取复杂。
4
1. 结点类的定义
#include <stdlib.h〉 #include <iostream.h> template <class T> class Node { Node<T> *next; //next 是下一个结点的地址
template <class T> void Node<T>::InsertAfter(Node<T> *p) {
// p points to successor of the current // node, and current node points to p.
p->next = next; next = p; }
{ Node<T> *newNode;
// allocate memory while passing item and NextPtr to
// constructor. terminate program if allocation fails
newNode = new Node<T>(item, nextPtr);
if (newNode == NULL)
{ cerr << "Memory allocation failure!" << endl;
exit(1); }
return newNode;
}
11
enum AppendNewline {noNewline, addNewline}; template <class T> // print a linked list void PrintList (Node<T> *head,
p=p->NextNode( ); } } 测试结果:打印 c b a
10
3. 定义线性链表的一些操作
#include "node.h"
// allocate a node with data member item and pointer nextPtr
template <class T>
Node<T>*GetNode(constT&item,Node<T>*nextPtr = NULL)
if(addnl == addNewline) cout << currPtr->data << endl;
{}
6
// return value of private member next
template <class T>
Node<T>* Node<T>::NextNode(void) const
{ return next;
}
7Leabharlann Baidu
// insert a node p after the current one
public: T data; // the data is public
Node(const T& item, Node<T>* ptrnext=NULL);
// list modification methods
void InsertAfter(Node<T> *p); Node<T> * DeleteAfter(void);
单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵
1
一、单链表
2
线性表的链式表示
顺序表的优点是可以随机选取表中元素 缺点是插入删除操作复杂。 用指针将互不相连的内存结点串成的 线性表叫线性链表。 结点 node 由一个数据元素域,一个或几个 指针域组成。单链表的结点只有一个指针域。
3
AppendNewline addnl = noNewline ) { // currPtr chains through the list, starting at head
Node<T> *currPtr = head; // print the current node's data until end of list while(currPtr != NULL) { // output newline if addl == addNewline