C语言实现双链表(带头节点)
2024-10-21 10:03:23
双链表和单链表性质相似只是在多加了一个前指针
1.定义结构体
typedef struct Node{
int data;
struct Node *prior;
struct Node *next;
}Node,*LinkedList;
2.比单链表一个指向
LNew->data = i;
L->next = LNew;
LNew->prior = L; // 比单链表多这一条
LNew->next = NULL;
L = LNew;
具体实现demo.c
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h> typedef struct Node{
int data;
struct Node *prior;
struct Node *next;
}Node,*LinkedList; LinkedList LinkedListInt(){
Node *Head,*L,*LNew;
int i;
Head = (Node *)malloc(sizeof(Node));
if(Head == NULL){
printf("申请空间失败\n");
exit(-);
} L = Head;
L->next = NULL; for(i=;i<;i++){
LNew = (Node *)malloc(sizeof(Node));
if(LNew == NULL){
printf("申请空间失败\n");
exit(-);
} LNew->data = i;
L->next = LNew;
LNew->prior = L;
LNew->next = NULL;
L = LNew;
} return Head;
} int main(int argc, char const *argv[]) {
/* code */
Node *p;
int i;
p = LinkedListInt();
p = p->next;
// 让p的前指针指向p,这样第一个有值元素就有前指针
p->prior = p; while(p != NULL){
//printf("%d,",p->prior->data);
printf("%d ",p->data);
//printf("%d ",p->next->data);
// 防止p指空报错
if(p->next != NULL){
p = p->next;
}else{
break;
}
} printf("\n");
// 测试指针能不能指回去
p = p->prior;
printf("%d ",p->data);
printf("\n"); return ;
}
最新文章
- [无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!!
- FileSaver.js ////////////////////zzzzzzzzzzzzzz
- JQuery初体验
- Python标准库——走马观花
- EJB究竟是什么,真的那么神奇吗??
- Python练习题 026:求100以内的素数
- 转:java提取图片中的像素
- R语言和大数据
- 初学ios遇到问题记录01
- jquery插件tab——小试牛刀
- .NET基础——循环、枚举
- Dynamics CRM 相关资料
- 快速进入pycharm图形界面
- Lua 迭代器
- boost 随机数发生器
- TopCoder SRM502 Div1 500 贪心 01背包
- 263A
- JavaScript学习笔记之call和apply
- BZOJ 2879 [Noi2012]美食节 | 费用流 动态开点
- Solidworks机构运动仿真
热门文章
- Virtex6 PCIe 超简版基础概念学习(二)
- poj1936
- mount -o remount,rw / (这是个求命的命令)
- struts2设置加载非默认路径的struts.xml文件解决方案
- 使用 ChromaKey 滤镜进行抠图
- 在windows中使用Navicat连接Linux虚拟机中的mysql数据库
- Spider Studio 新版本 (x-mas) - 可以引入第三方程序集, 可以将脚本生成为DLL
- pip和 easy_insall的区别
- C++ 运算符重载二(一元运算符重载)
- 人脸验证算法Joint Bayesian详解及实现(Matlab)