zoukankan      html  css  js  c++  java
  • C++链表,增删改查

    //

    //  main.c

    //  homework_linkList

    //

    //  Created by jiumiao on 15/7/23.

    //  Copyright (c) 2015 jiumiao. All rights reserved.

    //


    #include <stdio.h>

    #include <stdlib.h>


    typedef struct _NPC{

        char name[20];

        int attack;

        int hp;

    }NPC;


    typedef struct _node{

        NPC data;

        struct _node *pNext;

    }Node;


    Node *head = NULL;//定义一个头节点


    //加入节点

    void addNode()

    {

        if (head == NULL) {

            //head申请一个内存空间

            head = malloc(sizeof(Node));

            printf("请输入NPC的名字 攻击力 生命值: ");

            scanf("%s %d %d",head->data.name,&head->data.attack,&head->data.hp);

            head->pNext=NULL;

        } else {

            Node *p = head;//指向头节点

            while (p->pNext != NULL) {

                p = p->pNext;

            }

            //申请内存空间

            p->pNext = malloc(sizeof(Node));

            p=p->pNext;

            printf("请输入NPC的名字 攻击力 生命值: ");

            scanf("%s %d %d",p->data.name,&p->data.attack,&p->data.hp);

            

            p->pNext = NULL;

            

        }

        printf("加入节点成功! ");

    }


    //输出全部节点

    void printAllNode()

    {

        Node *q = head;//指向头节点

        while (q!=NULL) {

            printf("名字为:%s,攻击力:%d。生命值:%d ",q->data.name,q->data.attack,q->data.hp);

            q=q->pNext;

        }

        printf("输出全部节点成功。 ");

    }


    //插入节点

    void insertNode()

    {

        //创建一个新的节点

        Node *newNode = malloc(sizeof(Node));

        printf("请输入NPC的名字 攻击力 生命值: ");

        scanf("%s %d %d",newNode->data.name,&newNode->data.attack,&newNode->data.hp);

        

        printf("请输入插入到第几个节点之后: ");

        int num;

        scanf("%d",&num);

        Node *p = head;//指向头节点

        int count=0;//计数

        while (p != NULL) {

            count++;

            if (count == num) {

                break;

            }

            p=p->pNext;

        }

        Node *p2 = p->pNext;

        p->pNext = newNode;

        newNode->pNext = p2;

     

        printf("插入节点成功。 ");

    }


    //改动节点

    void modifyNode()

    {

        int num;

        printf("请输入您要改动的节点: ");

        scanf("%d",&num);

        Node *p = head;//指向头节点

        int count = 0;//计数

        while (p != NULL) {

            count++;

            if (count == num) {

                break;

            }

            p=p->pNext;

        }

        printf("请输入NPC的名字 攻击力 生命值: ");

        scanf("%s %d %d",p->data.name,&p->data.attack,&p->data.hp);

        

        printf("改动节点 ");

    }


    //删除节点

    void deleteNode()

    {

        int num;

        printf("请输入要删除第几个节点: ");

        scanf("%d",&num);

        Node *p = head;//指向头节点

        

        int count = 0;//统计节点数

        while (p != NULL) {

            count++;

            p=p->pNext;

        }

        if (count == 1) {//删除头节点

            

            p=head;

            head = head->pNext;

            free(p);//将原来的节点释放掉

        }else if(count == num){//删除最后一个节点

            Node *q = head;//指向头节点

            while (q->pNext->pNext != NULL) {

                q = q->pNext;

            }

            

            free(q->pNext->pNext);//释放节点

            q->pNext = NULL;

        }else{

            Node *q1 = head;//指向头节点

            int n=1;//统计节点数

            while (q1 != NULL) {

                n++;

                if (n == num) {

                    break;

                }

                q1 = q1->pNext;

            }

            Node * p2 = q1->pNext;

            q1->pNext = p2->pNext;//q1->pNext->pNext

            

            free(p2);

        }


        printf("删除节点成功! ");

    }


    int main(int argc, const char * argv[]) {

        // 怎样实现一个链表。当用户希望加入NPC的时候,能够在链表上添加一个NPC变量的节点,输出全部的节点。插入,改动。删除,退出系统

        

        printf("NPC管理系统!

    ");

        int num;

        while (1) {

            printf(" 1.加入NPC节点 ");

            printf("2.输出全部NPC的节点 ");

            printf("3.插入NPC的节点 ");

            printf("4.改动NPC的节点 ");

            printf("5.删除NPC的节点 ");

            printf("6.退出系统 ");

            printf("请选择所需操作: ");

            scanf("%d",&num);

            switch (num) {

                case 1:

                    addNode();//加入节点

                    break;

                case 2:

                    printAllNode();//输出全部节点

                    break;

                case 3:

                    insertNode();//插入节点

                    break;

                case 4:

                    modifyNode();//改动节点

                    break;

                case 5:

                    deleteNode();//删除节点

                    break;

                case 6:

                    return 0;

                    break;

                    

                default:

                    break;

            }

            

        }

        

        

        

        return 0;

    }

  • 相关阅读:
    关于接口测试的一些个人总结
    PMP学习考试回顾与心得
    RHCE第2课
    RHCE第1课
    kafka中对于zookeeper的理解和leader选举过程
    基于python的Selenium使用
    安装python第三方包的几种方式
    Vi命令下几种容易混淆的插入方式
    python单元测试框架unittest
    关于SQL子查询的一个问题
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6821246.html
Copyright © 2011-2022 走看看