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. LeetCode 919. Complete Binary Tree Inserter

    原题链接在这里:https://leetcode.com/problems/complete-binary-tree-inserter/ 题目: A complete binary tree is a ...

  2. JavaScript基础02-条件语句及介绍函数

    条件语句 if  和  if - else  语句 if(你还没睡着么?){ 是 那我们去撸串--- } 当条件判断为真true时,执行花括号内的语句,如果条件为假false,跳过花括号内的语句 if ...

  3. /proc/pid/statm content analysis

    root@am335x-ec:/# cat /proc/1/statm 6141 1181 699 232 0 4641 0 Table 1-3: Contents of the statm file ...

  4. WinDbg常用命令系列---输入内存值的命令e*

    e, ea, eb, ed, eD, ef, ep, eq, eu, ew, eza (Enter Values) e*命令将您指定的值输入内存.不要将此命令与~e(Thread-Specific C ...

  5. Redis的移库操作

    1.Redis默认有16个数据库,一般情况下使用0库: 2.移库操作: 将mysets移到一号库: 通过Redis查看器查看: 通过命令查看:

  6. Redis存储Set

    与List不同Set不能存储相同元素,且数据没有顺序. 存储结构: 1.存储与查看数据: 2.删除指定的一个元素: 3.判断是否存在某一个元素(存在返回1,不存在返回0): 4.判断两个set中的特有 ...

  7. Don't rely on luck.

    https://www.codewars.com/kata/dont-rely-on-luck/train/javascript 答案: 重写 Math.floor = function () ... ...

  8. Nodejs中的模块系统

    一.模块化的定义 ①具有文件作用域 ②具有通信规则:加载和导出规则 二.CommonJS模块规范 1.nodejs中的模块系统,具有文件作用域,也具有通信规则,使用require方法加载模块,使用ex ...

  9. CSS3 之loading动画实现思路

    效果大致如下: 主要实现方式: 该效果主要用到animation-timing-function中的steps()函数,该函数主要用于分步隐藏不同模块. 实现思路: 第一步动画: 第二步动画: 第三步 ...

  10. Java基础教程(全代码解析)

    字面量: 整数字面量为整型(int) 小数字面量为双精度浮点型(double) 数据类型: byte short int long float double 接下来代码展示理解 public clas ...