初始化链表,插入删除节点,遍历链表,链表长度,找出中间节点
来源:互联网 发布:电脑的网络有个感叹号 编辑:程序博客网 时间:2024/06/05 21:15
本科ee 连数据结构都没学过 只能靠烟酒生时期恶补了 这是看小甲鱼的数据结构讲解视频 u做的一道练习题,涉及了单链表的建立 遍历 节点插入和删除 找出中间节点 理解了这些 简单的单链表应该就没问题了
不说了 上程序
/* 初始化链表,插入删除节点,遍历链表,链表长度,找出中间节点 编译环境:vs2015 编译系统:windows 10 64*/#include <stdio.h>#include <stdlib.h>#include <malloc.h>// 定义链表中的节点typedef struct Lnode{ int member; // 节点中的成员 struct Lnode *pNext; // 指向下一个节点的指针}LNode, *LinkList;// 函数声明LinkList CreateList(); // 创建链表函数//void TraverseList(LinkList); // 遍历链表函数void InsertList(LinkList);void DelList(LinkList);void ListLen(LinkList);void ListMid(LinkList);int main(){ LinkList L = NULL; // 定义初始化头节点,等价于 struct Node *pHead == NULL int x; while (1) { printf("-------------操作选项-----------\n"); printf("1:生成链表 \n"); printf("2:插入新节点 \n"); printf("3:删除节点 \n"); printf("4:链表长度 \n"); printf("5:链表中间节点值 \n"); printf("--------------------------------\n"); printf("按数字键选择要执行的操作: "); scanf("%d", &x); printf("\n"); //输入2跳出循环,退出程序 if (x == 0) break; switch (x) { case 1: L=CreateList(); break; //输入1,跳出switch语句,进入下一次循环 // case 2: TraverseList(L); break; // 调用遍历链表函数 case 2: InsertList(L); break; //输入2,跳出switch语句,进入下一次循环 case 3: DelList(L); break; case 4: ListLen(L); break; case 5: ListMid(L); break; default: //数字输入错误,跳出siwtch语句,进入下一次循环 printf("输入的数字不正确\n"); break; } } //LinkList L = NULL; // 定义初始化头节点,等价于 struct Node *pHead == NULL// L = CreateList(); // 创建一个非循环单链表,并将该链表的头结点的地址付给pHead //TraverseList(L); // 调用遍历链表函数 return 0;}// 创建链表函数LinkList CreateList(){ LinkList L; int n; LinkList p; int i; srand(time(0)); L = (LinkList)malloc(sizeof(LNode)); // 分配一个不存放有效数据的头结点 L->pNext = NULL; printf("请输入节点个数n:"); scanf("%d", &n); for (i = 0; i < n; i++) { p = (LinkList)malloc(sizeof(LNode)); p->member = rand() % 100 + 1; p->pNext = L->pNext; L->pNext = p; } LinkList s = L->pNext; //将头节点的指针给予临时节点p while (NULL != s) //节点p不为空,循环 { printf("%d ", s->member); s = s->pNext; } printf("\n"); return L; //返回头节点}/* 遍历链表函数void TraverseList(LinkList L){ LinkList p = L->pNext; //将头节点的指针给予临时节点p while (NULL != p) //节点p不为空,循环 { printf("%d ", p->member); p = p->pNext; } printf("\n"); return 0;}*/void InsertList(LinkList L){ LinkList p,s; LinkList q = L->pNext; //将头节点的指针给予临时节点p int i,j; int e; p = L; j = 0; printf("请输入插入的位置i:"); scanf("%d", &i); printf("请输入插入的节点值e:"); scanf("%d", &e); while (p&&j<i-1) { p = p->pNext; //寻找第i-1个节点 ++j; } if (!p || j>i - 1) return 0; s = (LinkList)malloc(sizeof(LNode)); s->member = e; s->pNext = p->pNext; p->pNext = s; while (NULL != q) //节点p不为空,循环 { printf("%d ", q->member); q = q->pNext; } printf("\n"); return 1;}void DelList(LinkList L){ LinkList p, s; LinkList q = L->pNext; //将头节点的指针给予临时节点p int i, j; int e = 1; p = L; j = 0; printf("请输入想删除的节点i:"); scanf("%d", &i); while (p&&j<i - 1) { p = p->pNext; //寻找第i-1个节点 ++j; } if (!p || j>i - 1) return 0; s = p->pNext; p->pNext = s->pNext; free(s); while (NULL != q) //节点p不为空,循环 { printf("%d ", q->member); q = q->pNext; } printf("\n"); return 1;}void ListLen(LinkList L){ LinkList q = L->pNext; //将头节点的指针给予临时节点p int i = 0; while (NULL != q) //节点p不为空,循环 { i++; q = q->pNext; } printf("链表长度ListLen:%d", i); printf("\n"); return 1;}void ListMid(LinkList L){ LinkList search, mid; search = mid = L; int e; while (search->pNext != NULL) { if (search->pNext->pNext != NULL) { search = search->pNext->pNext; mid = mid->pNext; } else { search = search->pNext; mid = mid->pNext; } } e = mid->member; printf("中间节点值为%d", e);}
1 0
- 初始化链表,插入删除节点,遍历链表,链表长度,找出中间节点
- 删除链表中间节点
- 删除链表中间节点
- 双向链表 删除节点 插入节点
- 2.3-删除链表中间节点
- 删除链表的中间节点
- 删除链表的中间节点
- 删除链表的中间节点
- 判断链表是否为空、求链表长度、插入新节点、删除节点、链表排序
- malloc的链表,创建链表,遍历链表,插入节点,删除节点
- cci-Q2.3 只给出中间节点,删除链表中间节点
- [google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?
- 查找链表中间节点
- 寻找链表中间节点
- 寻找链表中间节点
- 一次遍历单向链表找到中间节点
- C++实现遍历链表一次求出中间的节点
- 【算法题】一次遍历单向链表找到中间节点
- iOS - TableView 去掉多余行数以及最后一行Cell分割线的处理
- 性能测试面试常见问题
- 【OpenCV入门教程之五】 分离颜色通道&多通道图像混合
- NoSql入门和概述
- Spring注解详解
- 初始化链表,插入删除节点,遍历链表,链表长度,找出中间节点
- EditorConfig使用和介绍
- English in December
- 类的多重继承
- Leetcode Multiply Strings 43
- Ubuntu下tomcat常用命令
- 随机试验与样本空间
- 字典教程精简版
- Oracle RMAN备份(一)