C语言单链表简单实现(简单程序复杂化)
PS: goto还是很好玩的。
#include <stdio.h>
#include <stdlib.h> typedef struct _node{
int value;
struct _node *next;
} Node;
typedef struct _list{
Node* head;
}List; void add(List* plist,int number);
void print(List* list);
void deletel(List* list,int number);
void freel(List* list); int main(int argc, char *argv[]) {
Node *head = NULL;
List list;
int number=0;
list.head=NULL;
for(;;){
printf("\n这是一个链表,现有如下功能 1.添加节点 2.遍历链表 3.查找并删除节点 4.释放链表 5.退出程序 \n请输入你想要进行的操作的选项:\n" );
out:
scanf("%d",&number);
switch(number){
case 1:
printf("你选择了添加节点\n请输入添加节点的值,输入-1结束添加\n");
do{
scanf("%d",&number);
if(number != -1){
//添加一个新的节点挂载。
add(&list,number);
}
}while(number != -1);
printf("添加完毕");
break;
case 2:
printf("你选择了遍历链表\n");
//打印链表
print(&list);
break;
case 3:
printf("你选择了查找并删除节点,请输入节点数据\n");
scanf("%d",&number);
//删除一个节点
deletel(&list,number);
break;
case 4:
printf("你选择了释放链表");
//释放链表
freel(&list);
printf("释放完毕");
break;
case 5:
goto end;
default :
printf("输入错误,请重新输入\n");
goto out;
}
}
end:
printf("拜拜");
return 0;
}
void add(List* plist,int number){
Node *p =(Node*)malloc(sizeof(Node));
p->value =number;
p->next =NULL;
Node *last =plist->head;
if(last){
while(last->next){
last = last->next;
}
last->next=p;
}else{
plist->head = p;
}
}
//遍历链表
void print(List* list){
Node *p;
for(p=list->head;p;p=p->next){
printf("%d\t",p->value);
}
printf("\n");
}
//查找并删除节点
void deletel(List* list,int number){
Node* p;
int isFound =0;
for(p=list->head;p;p=p->next){
if(p->value==number){
printf("找到了\n");
isFound = 1;
break ;
}
}
if(!isFound){
printf("没找到");
}
Node *q;
for(q=NULL,p=list->head;p;q=p,p=p->next){
if(p->value==number){
if(q){
q->next = p->next;
}else{
list->head=p->next;
}
free(p);
printf("已经删除");
break ;
}
}
}
//释放链表
void freel(List* list){
Node *q;
Node* p;
for(p=list->head;p;p=q){
q=p->next;
free(p);
}
}
读书和健身总有一个在路上
C语言单链表简单实现(简单程序复杂化)的更多相关文章
- 单链表数据结构 - java简单实现
链表中最简单的一种是单向链表,每个元素包含两个域,值域和指针域,我们把这样的元素称之为节点.每个节点的指针域内有一个指针,指向下一个节点,而最后一个节点则指向一个空值.如图就是一个单向链表 一个单向链 ...
- C语言单链表实现19个功能完全详解
谢谢Lee.Kevin分享了这篇文章 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将 ...
- C语言—单链表
单链表操作:读取,插入和删除 #include "stdafx.h" #include <string.h> #include <stdio.h> #inc ...
- C语言——单链表初始化、求表长、读表元素、插入元素
头文件Linear.h // 单链表的类型定义 typedef struct node { int data; // 数据域 struct node *next; // 指针域 }Node, *Lin ...
- c语言-单链表(二)
继续复习链表知识点,本章包含单链表的增加,删除,判断是否为空,和链表长度,以及链表的排序 几个知识点 1.链表的判断是否为空 //1.判断链表是否为空 bool isempty_list(PNODE ...
- c语言单链表实现
/************************************************************************* > File Name: singleLin ...
- C语言单链表的实现
// // main.c // gfhjhgdf // // Created by chenhao on 13-12-23. // Copyright (c) 2013年 chenhao. A ...
- 零基础玩转C语言单链表
下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...
- c语言-单链表(一)
定义节点: typedef struct Node { int data; Node* pNext; }NODE, *PNODE; 细节说明,PNode 就代表struct Node* ,上面的表单是 ...
随机推荐
- 05-Flutter移动电商实战-dio基础_引入和简单的Get请求
这篇开始我们学习Dart第三方Http请求库dio,这是国人开源的一个项目,也是国内用的最广泛的Dart Http请求库. 1.dio介绍和引入 dio是一个强大的Dart Http请求库,支持Res ...
- LeetCode 923. 3Sum With Multiplicity
原题链接在这里:https://leetcode.com/problems/3sum-with-multiplicity/ 题目: Given an integer array A, and an i ...
- WinDbg常用命令系列---错误消息显示!error
!error 这个!error扩展命令解码并显示有关错误值的信息. !error Value [Flags] 参数: Value指定以下错误代码之一:Win32.Winsock.NTSTATUS.Ne ...
- Windbg命令脚本流程控制语句详解
在Windbg命令脚本一文里,我们介绍了命令脚本语言的的组成要素,在本文里将对语句进行展开的讲解.这些语句主要是流程控制的语句,比如我们常见的条件分子和循环语句等. ; (命令分隔符) 分号(:)字符 ...
- Xamarin.Forms 入门
介绍 Xamarin.Forms是一个开源UI框架,Xamarin.Forms允许开发人员从单个共享代码库构建Android,iOS和Windows应用程序. Xamarin.Forms允许开发人员使 ...
- 使用rrweb 进行web 操作录制以及回放
rrweb 是使用typescript 开发的web 操作录制以及回放框架,包含了比较完整的系统组件 rrweb-snapshot 进行dom 与操作实践的关联处理 rrweb 主要包含了record ...
- CF1098E Fedya the Potter
CF1098E Fedya the Potter 题意:有一个序列\(A\). 对所有\(1\leq l\leq r\leq |A|\),将\(\gcd_{i=l}^{r}A_i\)加入\(B\)中. ...
- sdcf day1 qwq比赛题解
目录 写在前面 A 链接 思路 代码 B 链接 翻译 思路 代码 C 链接 翻译 思路 代码 写在前面 来到夏令营的第一场比赛,全是水题(第一题除外,不过是原题还是之前做过的,而且是并查集的果题,咕咕 ...
- HttpClient 发送请求和参数
发送请求 没有参数 private static void getData() { String timeStamp = String.valueOf(System.currentTimeMillis ...
- 服务器收不到支付宝notify_url异步回调请求的问题排查
小背景 最近在调整支付宝支付的功能时发现,不能够正常接收支付宝付款成功之后的回调通知了,从代码到配置最后到服务器配置都排查了一遍,最终发现问题原因竟然是因为我们的回调地址notify_url是http ...