链表的创建,插入,删除,输出

我用的是头插法

#include<stdio.h>

#include<malloc.h>

#define TURE 1

#define FLASE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

typedef int ElemType;

typedef struct LNode

{

ElemType data;

struct LNode *next;

}LNode, *LinkList ;

//创建链表

void BuildList_L(LinkList &L, int n)

{

LinkList p;

L = (LinkList)malloc(sizeof(LNode));

L->next = NULL;

printf("请输入元素值:");

for (int i = 0 ; i < n; i++ )

{

p = (LinkList)malloc(sizeof(LNode));

scanf_s("%d", &p->data); //输入元素值

p->next = L->next;

L->next = p; //插入到表头

}

}

Status ListInsert_L(LinkList &L, int i, ElemType e)

{

//在i的带头节点的单链线性表L中的第i个位置之前插入元素e

LinkList p;

LinkList s;

p = L;

int j = 0;

while (p && j < i - 1)  //寻找i-1个节点

{

p = p->next;

++j;

}

if (!p || j > i - 1)

return ERROR;  //i小于1或者大于表长加1

s = (LinkList)malloc(sizeof(LNode));  //生成新节点

s->data = e;    //插入L中

s->next = p->next;

p->next = s;

return OK;

}

//链表的删除

Status ListDelete_L(LinkList &L, int i, ElemType &e)

{

//在带头结点的单链线性表L中。删除第i个元素的。并由e返回其值

LinkList p;

LinkList q;

p = L;

int j = 0;

while (p->next && j < i - 1)

{

p = p->next;

++j;

}

if (!(p->next) || j > i - 1)

return ERROR;    //删除节点不合理

//删除并释放节点

q = p->next;

p->next = q->next;

e = q->data;

free(q);

return OK;

}

void PrintfList(LinkList &L)

{

LinkList p ;

p = L->next ;

if (p == NULL)

printf_s("该链表为空\n");

else

{

while (p)

{

printf_s("%d ", p->data);

p = p->next ;

}

}

}

void main()

{

LinkList l;

int a = 0; //a为链表长度

printf_s("请输入所要创建的链表元素的个数:");

scanf_s("%d", &a);

BuildList_L( l , a );

printf_s("输出如今的链表:");

PrintfList( l );

printf_s("\n");

int x = 0, y = 0;  //x代表所要插入元素的位置,y为所要插入元素的值

printf_s("输入要 插入的元素的位置及元素的值:");

scanf_s("%d%d", &x , &y );

ListInsert_L( l , x , y );

printf_s("输出如今的链表:");

PrintfList( l );

printf_s("\n");

int m = 0, n = 0;   //m代表所要删除元素的位置,n代表所要删除的元素的值

printf_s("输入要删除的元素的位置及元素值:");

scanf_s("%d%d", &m, &n);

ListDelete_L( l , m , n );

printf_s("输出如今的链表:");

PrintfList( l );

printf_s("\n");

}

时间: 2024-08-03 19:19:19

链表的创建,插入,删除,输出的相关文章

JavaScript之jQuery-3 jQuery操作DOM(查询、样式操作、遍历节点、创建插入删除、替换、复制)

一.jQuery操作DOM - 查询 html操作 - html(): 读取或修改节点的HTML内容,类似于JavaScript中的innerHTML属性 文本操作 - text(): 读取或修改节点的文本内容,类似于JavaScript中的textContent属性 值操作 - val(): 读取或修改节点的value属性值,类似于 JavaScript 中的value值 属性操作 - attr(): 读取或者修改节点的属性 - removeAttr(): 删除节点的属性 二.jQuery操作

使用OC实现单链表:创建、删除、插入、查询、遍历、反转、合并、判断相交、求成环入口

一.概念 链表和数组都是一种线性结构,数组有序存储的,链表是无序存储的. 数组中的每一个元素地址是递增或者递减的关系,链表的每一个节点的地址没有此规律,它们是通过指针的指向连接起来. 链表种类:单链表.双向链表.循环链表.双向循环链表 单链表:一个数据域data.一个后继指针域next.也即:上一个节点指向下一个节点,尾节点指向空. 双向链表:一个数据域data.一个前驱指针域previous.一个后继指针域next.也即:上一个节点和下一个节点互相指向,尾节点指向空. 循环链表:一个数据域da

链表 创建 插入 删除 查找 合并

最近学习了一下单链表的操作,将代码保存如下,供以后查看. 链表创建: 1.先建立一个不含数据的头指针*head,头指针的链接域为NULL. 2.声明一个用于暂存新申请空间的指针*pc,一个用于保存创建的链表的指针*r,令*r指向*head. 3.在循环中,为指针*pc申请空间,并给数据域赋值,head->next = pc, pc->next = NULL, head = pc. #define _CRT_SECURE_NO_DEPRECATE /*取消scanf,printf不安全之类的错误

[PHP] 数据结构-链表创建-插入-删除-查找的PHP实现

链表获取元素1.声明结点p指向链表第一个结点,j初始化1开始2.j<i,p指向下一结点,因为此时p是指向的p的next,因此不需要等于3.如果到末尾了,p还为null,就是没有查找到 插入元素1.插入元素和查找类似,找到位置后2.生成新的结点s, s->next=p->next p->next=s; 删除元素1.删除元素,找到位置后2.绕过一下,q=p->next p->next=q->next; <?php class Node{ public $data

「C语言」单链表/双向链表的建立/遍历/插入/删除

最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合,一种面向过程的MVC的感觉. 而这一切的基础就在于对链表的创建.删除.输出.写入文件.从文件读出...... 本篇文章在于巩固链表的基础知识(整理自<C语言程序设计教程--人民邮电出版社>第十章),只对链表的概念及增删改查作出探讨,欢迎指教. 一.链表结构和静态/动态链表 二.单链表的建立与遍历

链表的创建,插入,删除,输出基本操作

#include<stdio.h>#include<cstdlib> struct student  //定义一个学生结点,结点包括值域和指针域{ int num;//学号 char name[20];//姓名 char address[20];//地址 struct student *next;//定义结点的指针域,指向下一个结点};typedef struct student LIST;LIST *CreateList();LIST *InsertNode(LIST *h,LI

单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE -1 #define NULL 0 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(LNode) #

数据结构:链表的基本操作(创建,删除,插入,逆序,摧毁)

代码注释比较详细: #include <iostream> #include <cstdlib> using namespace std; struct Node{ int data; Node* next; }; Node* head = NULL; bool create() { head = (Node*)malloc(sizeof(Node)); if(NULL == head) return false; head->data = 0; head->next

单链表的插入删除操作(c++实现)

下列代码实现的是单链表的按序插入.链表元素的删除.链表的输出 // mylink.h 代码 #ifndef MYLINK_H #define MYLINK_H #include<iostream> using namespace std; struct node { int data; node *next; }; class list { public: list() { head=NULL; }; void insert(int item); void del(int item); voi

链表(二)——单向链表的基本操作(创建、删除、打印、结点个数统计)

1.指针的联动 通过两个指针分别指向前驱和后继结点,并在单向链表上进行移动,当指针指向待处理的结点时,该结点的前驱也有指针指向. 2.设有一个无序单向链表,且数据域的值均不相同,使指针pmin指向最小值结点,并使指针prem指向最小值结点的前驱结点: 代码片段: for(p = head; p; q = p, p = p->next) { if(pmin->data > p->data) { pmin = p; prem = q; } } 3.单向链表的删除算法 注:使用mallo