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语言单链表简单实现(简单程序复杂化)的更多相关文章

  1. 单链表数据结构 - java简单实现

    链表中最简单的一种是单向链表,每个元素包含两个域,值域和指针域,我们把这样的元素称之为节点.每个节点的指针域内有一个指针,指向下一个节点,而最后一个节点则指向一个空值.如图就是一个单向链表 一个单向链 ...

  2. C语言单链表实现19个功能完全详解

    谢谢Lee.Kevin分享了这篇文章 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将 ...

  3. C语言—单链表

    单链表操作:读取,插入和删除 #include "stdafx.h" #include <string.h> #include <stdio.h> #inc ...

  4. C语言——单链表初始化、求表长、读表元素、插入元素

    头文件Linear.h // 单链表的类型定义 typedef struct node { int data; // 数据域 struct node *next; // 指针域 }Node, *Lin ...

  5. c语言-单链表(二)

    继续复习链表知识点,本章包含单链表的增加,删除,判断是否为空,和链表长度,以及链表的排序 几个知识点 1.链表的判断是否为空 //1.判断链表是否为空 bool isempty_list(PNODE ...

  6. c语言单链表实现

    /************************************************************************* > File Name: singleLin ...

  7. C语言单链表的实现

    // //  main.c //  gfhjhgdf // //  Created by chenhao on 13-12-23. //  Copyright (c) 2013年 chenhao. A ...

  8. 零基础玩转C语言单链表

    下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...

  9. c语言-单链表(一)

    定义节点: typedef struct Node { int data; Node* pNext; }NODE, *PNODE; 细节说明,PNode 就代表struct Node* ,上面的表单是 ...

随机推荐

  1. Visual C++ 里的 Classes, Methods and RTTI

    类的基本布局 为了说明以下内容,让我们考虑这个简单的例子: class A { int a1; public: virtual int A_virt1(); virtual int A_virt2() ...

  2. terraform v0.12.0 发布了

    v0.12.0 相比以前的有好多新的特性,包括语法,以及函数增强,昨天还在折腾的一个json解码的问题,直接使用 v0.12.0 就可以解决了,同时也包含了for 操作处理同时官方文档对于v0.12. ...

  3. 18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED

    https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮  F1 4C为CRC高位和低位 ...

  4. 洛谷P1265 公路修建题解

    题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完成.在每一轮中,每个城市选择一个 ...

  5. socket简单实践

    目录 socket模块: family(socket家族) fileno=None 请忽略,特殊用途 socket模块: 把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装 应 ...

  6. python实现:判断某一天是那一年中的第几天

    方法1:先判断是否是闰年,然后再利用求和,得出某一天是第几天 # 方法1:low版 def func1(year, month, day): # 分别创建平年,闰年的月份天数列表(注意列表下标从0开始 ...

  7. 测试Leader应该做哪些事

    一.负责测试组的工作组织和管理 1.参加软件产品开发前的需求调研和分析: 2.根据需求,概要设计和开发计划编写项目总体测试计划,详细测试计划,测试大纲和测试文档结构表(测试计划 a.已上线产品维护以及 ...

  8. 使用docker 基于centos7制作mysql镜像

    说明:由于业务需要使用centos7.6+mysql5.7+jdk8以及其他的java程序,本想在网上找一个现成的,发现镜像都不适合我. 一.yum方式安装mysql 1.编写dockerfile文件 ...

  9. win7企业版激活

    win7企业版激活:(亲测有效) 打开命令提示符,依次执行下面的代码,分别表示:安装win7企业版密钥,设置kms服务器,激活win7企业版,查询激活期限,kms一般是180天,到期后再次激活. sl ...

  10. Mysql 之根据经纬度按距离排序

    一.方式一 st_distance 计算的结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米. SELECT *, (st_distance(point(lng,l ...