#include <cstdio>#include <cstdlib>#include <iostream>using namespace std;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 = (Node*)malloc(sizeof(Node)); printf("请输入NPC的名字 攻击力 生命值:\n"); 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 = (Node*)malloc(sizeof(Node)); p = p->pNext; printf("请输入NPC的名字 攻击力 生命值:\n"); scanf("%s %d %d",p->data.name,&p->data.attack,&p->data.hp); p->pNext = NULL; } printf("添加节点成功!\n");}//输出所有节点void printAllNode(){ Node *q = head;//指向头节点 while (q!=NULL) { printf("名字为:%s,攻击力:%d,生命值:%d\n",q->data.name,q->data.attack,q->data.hp); q=q->pNext; } printf("输出所有节点成功!\n");}//插入节点void insertNode(){ //创建一个新的节点 Node *newNode = (Node*)malloc(sizeof(Node)); printf("请输入NPC的名字 攻击力 生命值:\n"); scanf("%s %d %d",newNode->data.name,&newNode->data.attack,&newNode->data.hp); printf("请输入插入到第几个节点之后:\n"); 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("插入节点成功!\n");}//修改节点void modifyNode(){ int num; printf("请输入您要修改的节点:\n"); scanf("%d",&num); Node *p = head;//指向头节点 int count = 0;//计数 while (p != NULL) { count++; if (count == num) { break; } p=p->pNext; } printf("请输入NPC的名字 攻击力 生命值:\n"); scanf("%s %d %d",p->data.name,&p->data.attack,&p->data.hp); printf("修改节点\n");}//删除节点void deleteNode(){ int num; printf("请输入要删除第几个节点:\n"); 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("删除节点成功!\n");}int main(int argc, const char * argv[]) { // 如何实现一个链表,当用户希望添加NPC的时候,可以在链表上增加一个NPC变量的节点,输出所有的节点,插入,修改,删除,退出系统 printf("NPC管理系统!\n"); int num; while (1) { printf("\n1.添加NPC节点\n"); printf("2.输出所有NPC的节点\n"); printf("3.插入NPC的节点\n"); printf("4.修改NPC的节点\n"); printf("5.删除NPC的节点\n"); printf("6.退出系统\n"); printf("请选择所需操作:\n"); 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;}