赞
踩
双链表是给链表中的每一个节点多加一个指针域,这个指针域将指向它的前驱,因此在双链表上,既方便查找后继,又方便查找节点的前驱。抄写并理解代码。
1.双向链表的存储,建立链表。
- typedef struct DoubleLinkedNode{
- char data;
- struct DoubleLinkedNode *previous;
- struct DoubleLinkedNode *next;
- }DLNode, *DLNodePtr;
2.双向链表初始化
- DLNodePtr initLinkList(){
- DLNodePtr tempHeader = (DLNodePtr)malloc(sizeof(struct DoubleLinkedNode));
- tempHeader->data = '\o';
- tempHeader->previous = NULL;
- tempHeader->next = NULL;
- return tempHeader;
- }
3.双向链表打印
- void printList(DLNodePtr paraHeader){
- DLNodePtr p = paraHeader->next;
- while (p != NULL){
- printf("%c",p->data);
- p = p->next;
- }
- printf("\r\n");
- }
4.双向链表按位插入元素
- void insertElement(DLNodePtr paraHeader,char paraChar,int paraPosition){
- DLNodePtr p,q,r;
-
-
- p = paraHeader;
- for(int i = 0;i < paraPosition; i ++){
- p = p->next;
- if(p == NULL) {
- printf("The position %d is beyond the scope of the list.",paraPosition);
- return;
- }
- }
-
-
- q = (DLNodePtr)malloc(sizeof(struct DoubleLinkedNode));
- q->data = paraChar;
-
-
- r = p->next;
- q->next = p->next;
- q->previous = p;
- p->next = q;
- if (r != NULL){
- r->previous = q;
- }
- }
5.删除指定元素
- void deleteElement(DLNodePtr paraHeader, char paraChar){
- DLNodePtr p,q,r;
- p = paraHeader;
-
-
- while((p->next != NULL) && (p->next->data != paraChar)){
- p = p->next;
- }
-
-
- if(p->next == NULL){
- printf("The char'%c' does not exist.\r\n",paraChar);
- return;
- }
-
-
- q = p->next;
- r = q->next;
- p->next = r;
- if(r != NULL) {
- r->previous = p;
- }
-
-
- free(q);
- }
6.插入元素,测试操作
- void insertDeleteTest(){
-
- DLNodePtr tempList = initLinkList();
- printList(tempList);
-
-
- insertElement(tempList, 'H',0);
- insertElement(tempList, 'e',1);
- insertElement(tempList, 'l',2);
- insertElement(tempList, 'l',3);
- insertElement(tempList, 'o',4);
- insertElement(tempList, '!',5);
- printList(tempList);
-
-
- deleteElement(tempList, 'e');
- deleteElement(tempList, 'a');
- deleteElement(tempList, 'o');
- printList(tempList);
-
- }
7.地址的显示
- void basicAddressTest(){
- DLNode tempNode1, tempNode2;
-
- tempNode1.data = 4;
- tempNode1.next = NULL;
-
- tempNode2.data = 6;
- tempNode2.next = NULL;
-
- printf("The first node: %d, %d, %d\r\n",
- &tempNode1, &tempNode1.data, &tempNode1.next);
- printf("The second node: %d, %d, %d\r\n",
- &tempNode2, &tempNode2.data, &tempNode2.next);
-
- tempNode1.next = &tempNode2;
- }
8.运行结果
9.理解图示
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。