前面对单链表进行了简单的操作,下面是循环双链表的创建初始化:
点击(此处)折叠或打印
- #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);
- }