前面对单链表进行了简单的操作,下面是循环双链表的创建初始化:
点击(此处)折叠或打印
-
#include<iostream>
-
//#include<stdlib.h>
-
using namespace std;
-
struct List {
-
-
-
int data;
-
struct List *last, *next;
-
};
-
-
-
List *CreateList() {
-
-
-
List *first;
-
first = new List; //first = (List *)malloc(sizeof(List));
-
//上面向系统申请一块内存时,C++通过直接new,释放内存用delete。而C是通过malloc()来实现,释放内存用free().为了方便下文都是用new,也是为前两篇文章做个说明。
-
first->next = first;
-
first->last = first;
-
return first;
-
//该函数作用是创建了一个空结点,可以直接对其赋空值 first ->data = NULL;
-
}
-
-
-
List *InitialList(List *first) {
-
-
-
List *p, *head;
-
head = first;
-
for (int i = 0; i < 5; i++) { //用尾插法创建链表,并赋值
-
-
p = new List;
-
p->data = i;
-
//这个过程不要想象的太复杂,只要通过画图来,思路很清晰
-
p->last = head;
-
head->next = p;
-
head = p;
-
}
-
first->last = head;
-
head->next = first;
-
return first;
-
}
-
-
-
void PrintList(List *first){
-
List *q = first;
-
first = first->next;
-
cout << "正序打印:";
-
for (; first != q; first = first->next) {
-
-
-
cout << first->data << "
";
-
}
-
-
-
cout << endl;
-
-
-
List *p = first;
-
first = first->last;
-
cout << "逆序打印:";
-
for (; first != p; first = first->last) {
-
-
-
cout << first->data << "
";
-
}
-
}
-
-
-
int main() {
-
-
List *s,*t;
-
s = CreateList();
-
t = InitialList(s);
-
PrintList(t);
- }