循环链表的基本实现
来源:互联网 发布:java偏硬件的项目代码 编辑:程序博客网 时间:2024/06/05 21:54
双链表比单链表多了一个指针域,即next之外加一个front,指向上一个节点。实现一下看看
#include<stdio.h>#include<stdlib.h>struct Node;typedef struct Node *position;typedef position List;struct Node{ position Front; int Element; position Next;};List Creat(List l); //空链表position Find(int x, List l); //寻找某个数的节点void Insert(int x, List l); //插入void DeleteList(List l);void Swap(List l, position p1, position p2);//p1->Next=p2;交换p1,p2。int IsEmpty(List l);int IsEmpty(List l){ return l->Next == NULL;}List Creat(List l){ l = (List)malloc(sizeof(struct Node)); if (l == NULL) return NULL; l->Front = l; l->Next = l; l->Element = -1; return l;}void Insert(int x, List l){ position p; p = (position)malloc(sizeof(struct Node)); p->Element = x; p->Front = l->Front; l->Front->Next = p; l->Front = p; p->Next = l;}position Find(int x, List l){ position p, tmp; p = l->Next; tmp = l->Front; while (p != tmp) { if (p->Element == x) return p; else if (tmp->Element == x) return tmp; } if (p->Element == x) return p; return NULL;}void DeleteList(List l){ if (!IsEmpty(l)) { printf("empty list\n"); return; } position p, tmp; p = l->Next; while (p != l) { tmp = p->Next; free(p); p = tmp; }}void Swap(List l, position p1, position p2){ position p1f, p2n; p2n = p2->Next; p1f = p1->Front; p1f->Next = p2; p2->Front = p1f; p2->Next = p1; p1->Front = p2; p1->Next = p2n; p2n->Front = p1;}void PrintList(List l){ position p; p = l->Next; int n = 0; while (p&&n<10) { printf("%d\n", p->Element); p = p->Next; n++; }}
#include"循环链表.h"int main(){ List l = NULL; l = Creat(l); position p = l; for (int i = 0; i < 4; i++) { Insert(i*i, l); p = p->Next; } PrintList(l); printf("交换第二个第三个元素\n"); position p1, p2; p1 = l->Next->Next; p2 = p1->Next; Swap(l, p1, p2); PrintList(l); DeleteList(l); printf("删除链表\n"); return 0;}
有错误或者遗漏的请指正,谢谢。
0 0
- 循环链表的基本实现
- c语言实现循环链表的基本操作
- 循环队列的基本实现
- 循环队列的基本实现
- 双向循环链表的基本操作
- 双向循环链表的基本操作
- 双向循环链表的基本操作
- 双向循环链表的基本操作
- 循环链表的基本理解
- 双向循环链表的基本操作
- 循环双向链表的基本操作
- 循环链表的基本操作
- 单向循环链表的基本操作
- C++模板实现 循环链表的基本算法 《数据结构C++版》 北京科海
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- C语言实现双向非循环链表(不带头结点)的基本操作
- C语言实现双向非循环链表(带头结点尾结点)的基本操作
- 双向循环链表基本操作的实现(C语言)
- json中非法字符
- Mac上Python安装pylab
- twig模板引入
- Linux 下 Shell 命令的分类及用法
- Android内核开发 adb远程调试内核模块
- 循环链表的基本实现
- Java 集合框架分析:ConcurrentModificationException
- java程序初始化的顺序
- 设置EditText点击编辑状态后,软键盘把底部的控件顶起来
- 树莓派3B应用篇之视频监控(中)
- Julia: fill, repeat, repmat
- C++ RGB转灰度图像
- 国内各地图API坐标系统比较与转换
- 欢迎使用CSDN-markdown编辑器