我们可以尝试着在 main 函数中输出创建的双链表,C 语言代码如下:#include <stdio.h>#include <stdlib.h>typedef struct line { struct line* prior; //指向直接前趋 int data; struct line* next; //指向直接后继}Line;Line* initLine(Line* head) { int i; Line* list = NULL; ...
我慢慢的分解,首先分成两部分(char *)(pos)减去(unsigned long)(&((struct person *)0)- >list)然后转 成(struct person *)类型的指针。 (char *)(pos):是将pos由struct list_head*转 成char* ,这个好理解。 (unsigned long)(&((struct person *)0)->list):先看最里面的(struct person *)0),...
//直接前趋结点的next指针指向新结点 list->next = body; //新结点指向直接前趋结点 body->prior = list; list = list->next; } return head; } //输出链表中的数据 void display(Line* head) { Line* temp = head; while (temp) { //如果该节点无后继节点,说明此节点是链表的最后一个节点 if (...
head = head+1;returnhead; }intoutlist(int* list,inthead){intdata = list[head];printf("%d\n",data); head = head+1;returnhead; }voidlistprint(int* list,inttail){for(inti=0;i<tail;i++){printf("%d\n",list[i]); } }intmain(){inthead=0;inttail=0;intlist[MaxSize]; tail =...
{head->next=head->prev=head;}voidprint_list(structlist_head*head){structnode*p;for(p=(structnode*)head->next;p!=(structnode*)head;p=(structnode*)p->link.next){printf("%d ",p->data);}printf("\n");}intmain(){structlist_headhead={NULL,NULL};init_list_head(&head);// 用于...
staticinlineintlist_empty(conststructlist_head*head){returnhead->next==head;}// 运行时初始化链表#define INIT_LIST_HEAD(ptr) do { (ptr)->next = (ptr); (ptr)->prev = (ptr); } while (0)intmain(){LIST_HEAD(my_list_head);printf("列表是否为空 %d ",list_empty(&my_list_head));...
申请链表头空间 head=malloc(sizeof(struct app)); //2. 初始化链表头 head->next=NULL; } return head; } /* 函数功能: 在链表尾插入数据 int a 插入的数据值 struct app *head 链表头 */ void list_add(int a,struct app *head) { struct app *new_p=NULL; struct app *next_p=head; ...
list *head=initlist(); head->next=head; 4. 循环链表的创建操作 如图所示: 我们可以通过逐步的插入操作,创建一个新的节点,将原有链表尾结点的next指针修改指向到新的结点,新的结点的next指针再重新指向头部结点,然后逐步进行这样的插入操作,最终完成整个单项循环链表的创建。
把C语言指针用的最绝的应该就是Linux内核的嵌入式链表struct list_head 了: struct list_head { struct list_head *next, *prev; }; 它可以代表一切,它通过C指针完美诠释了OOD,list_head是世界的基类! 通过container_of宏,list_head可以转换为任意对象: ...
结果 ———-这里是分界线——— 感谢评论区反映,箭头指向的这里,两个方法调用写反了。 第一个应该是L=CreateList_Tail(L); 第二个应该是L=CreateList_Head(L);