标签:需要 部分 地址 知识 next 学习 div scan nod
看大话数据结构这本书已经有一段时间了,目前看到了图的那一部分,对前面所学习的知识进行回顾和总结。
1.链表
因为计算机不会给你分配一个较大的连续的内存,当存储较多的数据时就需要把一些不连续的内存,通过指针去练习起来,链表其实就是,链表的实现又很多,双向链表,既每一个节点都会指向自己前面的一个值和后面的一个值,循环链表,最后一个值就指向第一个存储位置,它们的大概思想都是类似的。链表和连续的数组它们都各自有各自的优势,连续的存储结构方便于遍历,而如果删除和插入较多的话比较适合于用链表存储。我仅仅实现了创建和遍历的操作,添加和删除可以制定元素位置和值进行遍历即可。
#include<stdio.h> #include<stdlib.h> struct Node{ int date; Node *next; }; int main(){ Node *head,*p,*q; head = p =(Node *)malloc(sizeof(Node)); printf("%d\n",head); while(1) { scanf("%d",&(p->date)); if(p->date == 0) break; q = (Node *)malloc(sizeof(Node)); printf("%d\n",p->date); p->next = q; p = q; printf("%d\n",p); } p->next = NULL; p =head; while(p->next != NULL) { printf("%d\n",p->date); p = p->next; } printf("%d\n",head->date); }
2.队列
队列是一种先进先出的数据结构,在链表的基础上,只需要创建一个结构体包含了头指针和尾指针,去指向整个队列的头和为去进行删除和增加就可以了,但要注意,当删除释放到最后一个节点时一定要记得去更改尾指针指向的地址,否者的话尾指针释放掉了就指向空了。
#include<stdio.h> #include<stdlib.h> struct Qnode { int date; Qnode *next; }; struct QnodeList { Qnode *Front,*Rear; }; void Enqueue(QnodeList *q,int date) { Qnode *new_node = (Qnode *)malloc(sizeof(Qnode)); new_node->date = date; new_node->next = NULL; q->Rear->next = new_node; q->Rear = new_node; printf("%d\n",q->Rear->date); return ; } void Dequeue(QnodeList *q,int *value) { if(q->Front == q->Rear) { printf("当前为空"); return ; } Qnode *old_node; old_node = q->Front->next; q->Front->next = old_node->next; if(q->Rear == old_node) { q->Rear = q->Front; } printf("%d\n",old_node->date); free(old_node); return ; } int main() { QnodeList hh; Qnode top; int value; hh.Front = ⊤ hh.Rear = ⊤ Enqueue(&hh,5); Enqueue(&hh,6); Enqueue(&hh,7); Dequeue(&hh,&value); Dequeue(&hh,&value); Dequeue(&hh,&value); Dequeue(&hh,&value); }
标签:需要 部分 地址 知识 next 学习 div scan nod
原文地址:https://www.cnblogs.com/nyNJist/p/11594693.html