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->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的名字
攻击力 生命值:\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 =
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;

}

时间: 2024-10-05 21:52:20

C++链表,增删改查的相关文章

单向链表增删改查的实现

/*实现单向链表的增删改查 */#include <malloc.h>#include <stdio.h>#include<stdlib.h>#define LEN sizeof(node) typedef struct node{ int num; struct node *next;}node,*pnode; /*在链表头进行插入,新节点成为头节点,原头节点成为新节点的下一个节点,头节点指针后伊一位*/void insert_head(pnode *phead,in

java实现单链表增删改查

package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class Node<E> { private E e; //数据data private Node<E> next; //指向下一个节点 public Node() { } public Node(E e) { this.e = e; } public Node<E> getNext() { return next; } public void setNext(Node&l

C链表一——链表增删改查以及初始化的头插法与尾插法

线性表的链式存储又称为链表(物理实现方式): 链式存储是最常用的存储方式之一.它不仅可以用来表示线性表,而且可以用来表示各种非线性的数据结构: 链表又可分为单链表.双链表.循环链表等. 一:单链表 所谓单链表是指数据结点是单向排列的.它包括两个域,一个信息域用于存放数据,一个指针域用于存放下个结点的地址: 单链表中结点类型的描述如下: struct Node { ElemType data_; Node *next_; }; 利用单链表可以解决顺序表需要大量的连续的存储空间的缺点,但是单链表附加

动态链表增删改查及排序功能

主要功能的实现: #include "SeqList.h" void InitSeqList(SeqList * pSeq)//初始化 { assert(pSeq); pSeq->array = (DataType*)malloc(sizeof(DataType)*DEFAULT_CAPICITY); pSeq->size = 0; pSeq->capicity = DEFAULT_CAPICITY; } void PrintSeqList(SeqList* pSeq

Java描述数据结构之链表的增删改查

链表是一种常见的基础数据结构,它是一种线性表,但在内存中它并不是顺序存储的,它是以链式进行存储的,每一个节点里存放的是下一个节点的"指针".在Java中的数据分为引用数据类型和基础数据类型,在Java中不存在指针的概念,但是对于链表而言的指针,指的就是引用数据类型的地址. 链表和数组都是线性的数据结构,对于数组而言其长度是固定的,由于在内存中其是连续的,因此更适合做查找与遍历,而链表在内存中是并不是顺序存储的,但是由于其是通过"指针"构成的,因此在插入.删除时比较数

【C】利用单链表数据结构实现通讯录,链表的增删改查

C语言中实现链表,是需要利用到C语言中比较难的结构体与指针才能实现. 结构体中放一个指向后接节点的指针与每一个结点应该存放的信息. 下面做一个命令行的通讯录来说明链表的增删改查这个问题. 一开始让用户输入链表,按1可以输出,按3可以删除. 可以修改: 可以插入. 按0则可以退出: 代码如下: #include<stdio.h> #include<stdlib.h> typedef struct Linklist{ char name[10];//存放名字 char num[10];

链表的基本操作之_增删改查

<span style="font-size:32px;"><strong style="background-color: rgb(51, 255, 51);">链表的基本操作之_增删改查</strong></span> #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct Node { int

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

数据结构 参考:http://lupython.gitee.io/ 线性结构 就是能够用一根线串起来的数据结构 数组 (列表) 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件? 答:内存必须有一块连续的内存空间 int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型. int a[7] = array(1,2,3,4,5,6,7) 问:如何申请内存? 答:C,C++语言,申请:mallco (28).释放:free(28) 问:int

java-jdbc-mysql:实现数据库表的增删改查

以数据库test下数据表student(sno,sname,ssex,sage,sdept)为例: student表中的已有的所有记录: Java代码对表test.student的操作: 创建student类,包含String sno,String sname,String ssex,int sage,String sdept: 1 package jdbcTest; 2 3 public class Student { 4 private String sno,sname,ssex,sdept

Django rest_framework实现增删改查接口

目录 Django rest_framework实现增删改查接口 写接口前的知识准备 __all__的使用方法 序列化类配置 Response二次封装 连表深度查询 单查群查接口 单删群删接口 单增,群增接口 整体单改群改接口 局部修改数据 视图给序列化传参 Django rest_framework实现增删改查接口 本文使用Django的rest_framework框架的ModelSerializer模块和ListSerializer模块实现单查群查.单删群删.单增群增.单改群改接口. 写接口