C++链表,增删改查
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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的名字攻击⼒⽣命值:\n");
scanf("%s %d %d",head->,&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的名字攻击⼒⽣命值:\n");
scanf("%s %d %d",p->,&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->,q->data.attack,q->data.hp); q=q->pNext;
}
printf("输出全部节点成功。
\n");
}
//插⼊节点
void insertNode()
{
//创建⼀个新的节点
Node *newNode = malloc(sizeof(Node));
printf("请输⼊NPC的名字攻击⼒⽣命值:\n");
scanf("%s %d %d",newNode->,&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->,&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; }。