单链表
来源:互联网 发布:论文查重软件 编辑:程序博客网 时间:2024/06/05 09:50
只附带了,建立,插入,遍历,查找一个,删除一个,删除整个。很简单的单链表。只是做回忆复习用。
建立链表:
typedef struct Node{ int datashuzi; struct Node *pNext;}Node,*pNode;pNode creat_list(void) { int len; int i; int val; pNode list; pNode pHead = (pNode)malloc(sizeof(Node)); if (NULL == pHead) { printf("内存不足"); exit(-1); } else { pNode pTail = pHead; pHead->pNext = NULL; printf("输入链表长度\n"); scanf("%d", &len); for (i = 0; i < len; i++) { pNode p = (pNode)malloc(sizeof (Node)); if(NULL == p) { printf("内存不足\n"); exit(-1); } else { printf("请输入此次数值\n"); scanf("%d", &val); p->datashuzi = val; pTail->pNext = p; p->pNext = NULL; pTail = p; } } } return pHead;} //建立链表
寻找节点
pNode findp(pNode pHead, int pos) { int i = 0; pNode p = pHead; while (i<=pos - 1) { if (p->pNext == NULL) { printf("输入的值为大于链表长度的,将默认为最后一个元素\n"); break; } p = p->pNext; i++; } return p;}//返回的指针指向第pos个元素
遍历所有和查看单个
void showlist(pNode pHead){ pNode p = pHead->pNext; int i = 0; while (p != NULL) { printf("第%d元素内所含数据为%d\n",i+1, p->datashuzi); i++; p = p->pNext; }}void showone(pNode pHead, int pos) { pNode p = findp(pHead, pos); printf("您要找的元素内所含数据为:%d\n", pos, p->datashuzi);}
插入
void Insert_list(pNode pHead, int pos, int val) { pNode q = (pNode)malloc(sizeof(Node)); pNode p = findp(pHead, pos); q->datashuzi = val; q->pNext = p->pNext; p->pNext = q;}//插入操作,插入在pos个元素前
删除单个,与删除所有
void Delete_list(pNode pHead, int pos) { pNode p = findp(pHead, pos-1); p->pNext = p->pNext->pNext;}void Delete_all(pNode pHead) { pNode tempp, p; p = pHead; while (p != NULL) { tempp = p; p = p->pNext; free(tempp); }}
头文件与main函数
#include <stdio.h>#include <stdlib.h>int main() { int l = 0; pNode p=NULL; int temp, temp2; while (l != 9) { printf("请输入你想要的服务:\n1,建立链表\n2,游览所有数据\n3,查看某一数据\n4,插入数据\n5,删除数据\n6,删除整个链表\n\n9,结束程序\n(提示:请先建立链表)\n"); scanf("%d", &l); if (p == NULL && l != 1) printf("请先建立链表\n"); else { switch (l) { case 1: if (p != NULL) { printf("已经建立了,若想建立,请删除整个链表"); break; } p = creat_list(); break; case 2: showlist(p);break; case 3: printf("输入第几个元素\n"); scanf("%d", &temp); showone(p, temp); break; case 4: printf("请输入填充在第几个元素之后,要增加的数据,中间以“,”隔开"); scanf("%d,%d", &temp, &temp2); Insert_list(p, temp, temp2); break; case 5:printf("输入第几个元素\n"); scanf("%d", &temp); Delete_list(p, temp); break; case 6:Delete_all(p); p = NULL; break; default:printf("输入有误"); break; } } }}
阅读全文
0 0
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- SSM框架(spring+springMVC+Mybatis) pom.xml文件
- POJ 1552 Doubles
- Git Repo 的一些问题
- 《慕课网玩转算法面试》笔记及习题解答4
- window安装memcache
- 单链表
- java调试过程中使用日志输出
- 三种方法实现js跨域访问(转载)
- JavaSE—java.math.BigDecimal中的setSCale函数的使用
- hosts文件修改
- Oracle之索引/视图/游标及PL/SQL编程
- 背景透明问题 rgba
- vs2013 vs2015 集成环境yasm 配置
- VS2013+OPENCV3.0.0配置纪要