双向不循环链表
Posted rivsidn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双向不循环链表相关的知识,希望对你有一定的参考价值。
下边程序实现的是一个双向不循环链表。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define new(p) ((p) = malloc(sizeof(*(p)))) #define IFNAMSIZ 16 struct interface *int_last, *int_list; struct interface struct interface *next, *prev; char name[IFNAMSIZ]; ; static struct interface *add_interface(char *name) struct interface *ife, **nextp, *new; for (ife = int_last; ife; ife = ife->prev) int n = strcmp(ife->name, name); if (n == 0) return ife; if (n < 0) break; /*宏函数提前展开了。如果函数名跟局部变量名重名,该该局部中函数名会被覆盖*/ new(new); strncpy(new->name, name, IFNAMSIZ); /*通过二级指针访问指针变量,既可以访问,又可以修改指针变量*/ nextp = ife ? &ife->next : &int_list;
/*new初始化*/ new->prev = ife; new->next = *nextp; if (new->next) new->next->prev = new; else int_last = new;
/*
* 当nextp不是二级指针的时候,上边的code很容易就能修改,但是下边这句就不能
* 这么来写了,也就是说,二级指针在既要访问,又要修改某个指针变量的时候效果
* 很好。
*/ *nextp = new; return new;
/*
* 分四种情况测试:
* 1.完全没变量时候插入一个元素
* 2.有一个元素时候插入在前边
* 3.有一个元素时候插入在后边
* 4.有两个元素时候插入在中间
*/ int main() struct interface *ife; add_interface("eth0"); #if 0 add_interface("eth2"); add_interface("eth1"); add_interface("eth4"); add_interface("eth5"); add_interface("eth6"); add_interface("eth9"); #endif for (ife = int_list; ife; ife = ife->next) printf("ife name %s\n", ife->name); printf("---------------\n"); for (ife = int_last; ife; ife = ife->prev) printf("ife name %s\n", ife->name); return 0;
以上是关于双向不循环链表的主要内容,如果未能解决你的问题,请参考以下文章