单链表基本操作的C语言实现(链式存储结构)
来源:互联网 发布:hadoop java获取文件 编辑:程序博客网 时间:2024/06/05 18:39
#include<stdio.h>#include<stdlib.h>typedef int DataType;typedef struct Node{ DataType data; struct Node *next;}List;#define Num 3List* InitList();void CreateListHead(List *l, int n);void CreateListTail(List *l, int n);int Length(List *l);void TraverseList(List *l);int Find(List *l, DataType d);void Insert(List *l, int n, DataType data);void Delete(List *l, int n);void ClearList(List *l);void main(){ int n, pos, input; List *l; l = InitList(); /*CreateListHead(l, Num); printf("线性表的长度是%d\n", Length(l)); TraverseList(l);*/ CreateListTail(l, Num); printf("线性表的长度是%d\n", Length(l)); TraverseList(l); //printf("%d %d %d %d\n", l->data, l->next->data, l->next->next->data, l->next->next->next->data);//分别打印各个节点的数据域 printf("请输入要查找的元素:"); scanf_s("%d", &input); printf("要查找的元素在链表中第%d个位置\n", Find(l, input)); printf("请输入要插入的元素位置和相应数据:"); scanf_s("%d%d", &pos, &input); Insert(l, pos, input); printf("线性表的长度是%d\n", Length(l)); TraverseList(l); printf("请输入要删除的节点下标:"); scanf_s("%d", &n); Delete(l, n); printf("线性表的长度是%d\n", Length(l)); TraverseList(l); ClearList(l); printf("清空线性表后长度为%d\n", Length(l)); TraverseList(l);}//链表初始化(即分配头结点的内存空间)List* InitList(){ List *l; l = (List*)malloc(sizeof(List)); if (!l) { printf("初始化失败"); exit(1); } l->next = NULL;//头结点指针域为空 return l;}//创建带头结点的线性表(头插法)void CreateListHead(List *l, int n){ int i, data; List *p; for (i = 0; i < n; i++) { p = (List*)malloc(sizeof(List)); printf("请输入数据:\n"); scanf_s("%d", &data); p->data = data; p->next = l->next;//确定逻辑关系 l->next = p; }}//创建带头结点的线性表(尾插法)void CreateListTail(List *l, int n){ int i, data; List *p,*r = l; for (i = 0; i < n; i++) { p = (List*)malloc(sizeof(List)); printf("请输入数据:\n"); scanf_s("%d", &data); p->data = data; //p->next = r->next; r->next = p;//确定逻辑关系 r = p; } r->next = NULL;}//求线性表的长度int Length(List *l){ List *r = l;//不要拿原指针计算 int i = 0; while (r->next) { i++; r = r->next; } return i;}//遍历线性表void TraverseList(List *l){ List *r = l; printf("链表中的元素依次为:"); while (r->next) { r = r->next; printf("%d ", r->data); } printf("\n");}//查询链表中某结点数据是否存在int Find(List *l, DataType d){ int i = 1; List *r = l; r = r->next; while (r && r->data != d) { r = r->next; i++; } if (!r) return 0; else return i;}//在链表中插入一个新节点(在第n个节点前插入)void Insert(List *l, int n, DataType data){ int i = 0; List *p, *r = l; while (r->next && i < n-1)//寻找第n-1个节点 { r = r->next; i++; } if (r->next == NULL) printf("第%d个节点不存在", n); else { p = (List*)malloc(sizeof(List));//确定逻辑关系 p->data = data; p->next = r->next; r->next = p; }}//删除链表中某一节点void Delete(List *l, int n){ int i = 0; List *s, *r = l; while (r->next && i < n-1)//寻找第n-1个节点 { r = r->next; i++; } if (r->next == NULL) printf("第%d个节点不存在", n); else { s = r->next;//确定待删除节点 r->next = s->next;//确定逻辑关系 free(s); }}//清空链表(保留头结点,指针域为NULL)void ClearList(List *l){ List *s, *r = l; while (r->next) { s = r->next; r->next = s->next;//确定逻辑关系 free(s); }}
阅读全文
0 0
- 单链表基本操作的C语言实现(链式存储结构)
- 线性表的链式存储结构(C语言实现)
- 单链表的应用——多项式加法的C语言实现(链式存储结构)
- C语言实现线性表的链式存储结构
- 队列的基本操作(采用链式存储结构)
- 线性表的链式存储(单链表)C语言实现
- C语言栈的链式存储结构
- C的简易栈(链式存储结构)实现
- 队列的链式结构C语言实现
- 栈的链式存储实现c语言
- 队列的链式存储实现c语言
- 线性表之单链表(链式存储结构)--C实现
- [数据结构][C语言]图的基本介绍和操作实现之图的存储结构
- 循环队列-链式存储结构-c语言实现
- 线性表-链式存储结构(C语言实现)
- 数据结构实验二 链式存储结构----单向链表的有关操作(学生成绩信息C语言)
- 二叉树的链式存储结构及基本操作
- 链表(链式存储)的基本操作
- python2与3的差别 字典的attribute:items与iteritems
- 超详细mysql left join,right join,inner join用法分析
- Github桌面端程序上传代码
- [codeforces] 877D. Olya and Energy Drinks (BFS)
- 使用android--建立第一个APP程序
- 单链表基本操作的C语言实现(链式存储结构)
- dict
- java对象的内存
- Python 编码规范
- Javascript——简介
- [codeforces] 877E. Danil and a Part-time Job(DFS序+线段树)
- setInterval图片缓冲(js)
- 数据结构--线性表C实现
- 试试写个博客