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. OLED液晶屏幕(4)串口读取文字并分割,液晶屏幕显示

    ESP8266-07 0.93存 液晶屏 128*64  驱动芯片 ssd1306 接线 VCC-5v GND-GND SCL-D1(SCL) SDA-D2(SDA) 安装两个库 #include & ...

  2. LeetCode 1099. Two Sum Less Than K

    原题链接在这里:https://leetcode.com/problems/two-sum-less-than-k/ 题目: Given an array A of integers and inte ...

  3. c++ 去掉所有空格及换行符

    string get_string(string res){ //删除换行符 int r = res.find('\r\n'); while (r != string::npos) { if (r ! ...

  4. WinDbg常用命令系列---显示段选择器dg、链接列表dl和字符串ds/dS

    dg (Display Selector) dg命令显示指定选择器的段描述符. dg FirstSelector [LastSelector] 参数: FirstSelector指定要显示的第一个选择 ...

  5. Lightning Web Components 组合(五)

    使用组合我们可以用来设计复杂的组件. 组合一些比较小的组件,可以增加组件的重新性以及可维护性. 通过以下一个简单的demo,将会展示关于owner 以及container 的概念,在实际的项目中 ex ...

  6. 2-ESP8266 SDK开发基础入门篇--非RTOS版与RTOS版

    https://www.cnblogs.com/yangfengwu/p/11071580.html 所有的源码 https://gitee.com/yang456/Learn8266SDKDevel ...

  7. MuPAD使用总结

    MuPAD使用总结 一.打开notebook界面的方法: 二.notebook界面的三种区域 (一).输入区域 输入区域在打开来的时候就有,就是,但是之后如果还想再加,可以点击上方红色框内的图标. 这 ...

  8. 「ZJOI2016」小星星

    传送门 Description Solution 容斥,考虑有多少个节点不被匹配到,求出的方案,多个点可以同时不被匹配到 状态压缩+树形dp Code  #include<bits/stdc++ ...

  9. element ui里面table分页,页数从0开始的怎么做?

    需求: 后台请求的接口是从0页开始的,但是pagination是从1开始的,就是在点击pagination的第1页是后台转0 1首先在data里面定义为1,其他地方也是定义1 return { for ...

  10. 反向传播BP算法

    前向传播模型 一般我们使用的公式是: \[ a=\frac{1}{1+\exp \left(-\left(w^{T} x+b\right)\right)} = \frac{1}{1+\exp \lef ...