单链表的小例子(一)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义一个存放数据的结构体
typedef struct
{
     int num;
    char name[20];
}DATA;
//定义链表
typedef struct node
{
    DATA data;
    struct node *next;
}NODE,*PNODE;

DATA getData();//模拟接受数据
PNODE createNode(DATA data);//创建节点
PNODE insertNode(PNODE head,DATA data);//插入节点
void showAllNode(PNODE head);//显示插入的所有节点
PNODE deleteNode(PNODE head);//删除节点
void freeAllNode(PNODE head);//释放节点
void fun();
int menu();
int main()
{
    PNODE head=NULL;//建立空表
    fun();
    return 0;
}
int menu()
{
    //system("clear");
    printf(
        "\n\t单链表系统"
        "\n\t1)插入链表"
        "\n\t2)删除链表"
        "\n\t3)显示链表"
        "\n\tq)退出"
    );
    printf("\n\t请输入选择:");
    char select=getchar();
    while((select!=‘\n‘)&& (getchar()==‘\n‘))
    {
        return select;
    }
}

void fun()
{
    PNODE head=NULL;
    int flag=1;
    while(flag)
    {
        switch(menu()){
            case ‘1‘:head=insertNode(head,getData());break;
            case ‘2‘:head=deleteNode(head);break;
            case ‘3‘:showAllNode(head);break;
            case ‘q‘:flag=0;break;
            default:   printf("\t输入有错误!\n");
        }
        printf("\n\t回车继续!\n");
        getchar();
    }
    freeAllNode(head);
    head=NULL;
}
void freeAllNode(PNODE head)
{
    head=NULL;
}

PNODE deleteNode(PNODE head)//顺序删除节点
{
     PNODE p=head->next;//备份
    free(head);//释放
    return p;
}
void showAllNode(PNODE head)//显示插入的所有节点
{
    PNODE p=head;
    printf("\tNum Name\n");
    while(p!=NULL)
    {
        printf("\t%d %s\n",p->data.num,p->data.name);
        p=p->next;
    }
}
PNODE insertNode(PNODE head,DATA data)//顺序插入节点
{
    PNODE temp=createNode(getData());
    temp->next=head;
    return temp;
}

PNODE createNode(DATA data)//创建节点
{
    PNODE temp =(PNODE)malloc(sizeof(NODE));
    temp->data=data;
    temp->next=NULL;
    return temp;
}
DATA getData()
{
    static int n=0;
    n++;
    char str[20]={0};
    sprintf(str,"test-%d",n);
    DATA temp={n,""};
    //temp.name[0]+=1;
    strcpy(temp.name,str);
    return temp;
}

运行结果(在VS2010中实现,在Linux下也可以实现):

时间: 2024-12-08 23:29:49

单链表的小例子(一)的相关文章

单链表的小例子(二)增、删、查、改、排序

#include<stdio.h> #include<stdlib.h> #include<string.h> //定义一个结构体存放数据 typedef struct { int num; char name[20]; }DATA; //定义链表 typedef struct node { DATA data; struct node *next; }NODE,*PNODE; DATA getData();//模拟接受数据 PNODE createNode(DATA

单链表的小例子(三)链表读取和保存

#include <stdio.h> #include <malloc.h> #include <string.h> struct address { int a; int b; char c; struct address *next; }; void SaveToFile(struct address *p, FILE *fp) { if(p != NULL) { do { fwrite(p, sizeof(struct address), 1, fp); p =

react表单的一些小例子

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

4-20 这是一次失败的小项目 (单链表应用--通讯录)

昨天和今天一直在磕这个小项目,由于近来学习了单链表的相关知识,所以想趁周末做一个通讯录的小项目,主要功能就是增,删,插入. 但是意外重重 在做这个小项目的过程中有几点深入的体会: 应该深入学习一下软件工程,了解软件是如何设计的,因为在写完功能之后再写主界面时,感觉十分混乱.没有办法画一个清晰的逻辑框图,也可能是原来的项目都是有人设计好,第一次自己去设计,要多加练习: 深入学习一下c语言标准库,从而对系统定义的函数有更好的操作性: 先上一下这个失败的代码吧 1 #include<stdio.h>

一起talk C栗子吧(第十二回:C语言实例--单链表一)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们没有说具体的例子,而且是说了例子中的文件组织结构.这一回咱们继续说C例子, 说的例子是链表,更准确的说法叫作单链表.咱们不但要说C例子,而且会在例子中使用上一回中说过的 文件组织结构,就当作是举例说明文件组织结构的使用方法. 有点一石二鸟的感觉,哈哈. 链表定义 看官们,所谓的链表其实就是一组元素通过一定的方式链接在一起.比如我们坐的火车

如何使用C++实现单链表

线性表--链表 为什么假期也在发文章 //TODO NullGirlfrindException 请忽略以上两行无聊的事实...... 如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候,却需要移动大量的元素,效率较低,那么是否有一种方法可以改善或者解决这个问题呢? 首先我们需要考虑,为什么顺序表中的插入删除操作会涉及到元素的移动呢? 好家伙,问题就

数据结构(三)之单链表反向查找

一.反向查找单链表 1.简单查找 先遍历获取单链表单长度n,然后通过计算得到倒数第k个元素的下标为n-k,然后查找下标为n-k的元素. 2.优化查找 先找到下标为k的元素为记录点p1,然后设置新的记录点p2的下标从0开始,同时遍历两个记录点,直到p1的值为null,p2是倒数第k个元素. 单链表结点: package cn.edu.scau.mk; /** * * @author MK * @param <T> */ public class Node<T> { private T

HTML5实战 文摘 第二章 HTML5用于创建表单的输入小部件 数据绑定以及数据验证

HTML5表单在原有表单特性的基础上增加了一些比较便捷的特性,使得我们实现一些常用的表单的小部件.输入类型.输入验证不再那么大费周章.上一篇文章提到了HTML5实现的几种新的输入类型,现在我们更加详尽的了解HTML5的表单产生的新特性和功能. 1. 输入类型和输入属性 菜鸟教程上给出了HTML5新增加的input输入类型,可以在上面尝试一下不同类型的样子,基本可以满足日常开发需求了.类型不同会照成什么内在差异呢?主要有三点,首先,浏览器会根据输入类型进行基本的数据校验,例如type="email

1215.2——单链表

链表的结点结构 ┌───┬───┐ │data|next│ └───┴───┘ data域--存放结点值的数据域 next域--存放结点的直接后继的地址(位置)的指针域(链域) 实例:从终端输入5个姓名,单链表输出 typedef struct node{ char * name; struct node *next; }Node;  // 定义一个结构体 void myfree(Node * pHead){   //从头指针开始释放 while (pHead != NULL) { Node *