单链表的创建,插入,删除,遍历

  1 #include<stdio.h>
  2 #include<iostream>
  3 #include<malloc.h>
  4 #define OK 1
  5 #define ERROR 0
  6 using namespace std;
  7 typedef struct LNode
  8 {
  9     int data;
 10     struct LNode *next;
 11 } LNode,*LinkList;
 12
 13 void Init(LinkList &L)///初始化
 14 {
 15     L=new LNode;
 16     L->next=NULL;
 17 }
 18 void CreatList_R(LinkList &L,int n)///尾插法  创建链表
 19 {
 20     int x;
 21     LinkList r,p;
 22     L =new LNode;
 23     L->next=NULL;//先建立一个带头结点的空链表
 24     r=L;//尾指针r指向头结点
 25     for(int i=1; i<=n; i++)
 26     {
 27         p=new LNode;
 28         scanf("%d",&x);
 29         p->data=x;
 30         p->next=NULL;
 31         r->next=p;//将新结点*p插入到尾结点*r之后
 32         r=p;//r指向新的尾结点*p
 33     }
 34 }
 35 void CreatList_H(LinkList &L,int n)//头插法  创建链表
 36 {
 37     int x;
 38     LinkList P;
 39     L=new LNode;
 40     L->next=NULL;//先建立一个带头结点的空链表
 41     for(int i=1; i<=n; i++)
 42     {
 43         scanf("%d",&x);
 44         P=new LNode;//生成新节点
 45         P->data=x; //输入元素值赋给新节点*P的数据域
 46         P->next=L->next;
 47         L->next=P;//将新节点*P插入到头结点之后
 48     }
 49 }
 50 void outputList(LinkList L)///单链表的遍历
 51 {
 52     LinkList p;
 53     p=L->next ;
 54     if(p==NULL)
 55         cout<<"该链表是空链表"<<endl;
 56     while(p!=NULL)
 57     {
 58         cout<<p->data<<" ";
 59         p=p->next ;
 60     }
 61     printf("\n");
 62 }
 63
 64 int ListInsert(LinkList &L,int i,int e)
 65 {
 66     ///在带头结点的单链表L中第i个位置插入值为e的新节点
 67     LinkList P,S;
 68     P=L;
 69     int j=0;
 70     while(P&&(j<i-1))
 71     {
 72         P=P->next;
 73         ++j;
 74     }
 75     if(!P||j>i-1)
 76         return 0;
 77     S=new LNode;
 78     S->data=e;
 79     S->next=P->next;
 80     P->next=S;
 81     return 1;
 82 }
 83 int ListDelete(LinkList &L,int i)
 84 {
 85     ///在带头结点的单链表L中,删除第i个元素
 86     LinkList P,q;
 87     P=L;
 88     int j=0;
 89     while((P->next)&&(j<(i-1)))
 90     {
 91         P=P->next;
 92         ++j;
 93     }
 94     if(!(P->next)||(j>i-1))
 95         return 0;
 96     q=P->next;
 97     P->next=q->next;
 98     delete q;
 99     return 1;
100 }
101
102 int main()
103 {
104     int n,x,e;
105     LinkList H;
106     Init(H);
107     scanf("%d",&n);
108     CreatList_R(H,n);
109     int In;
110     scanf("%d",&In);
111     while(In--)
112     {
113         scanf("%d %d",&x,&e);
114         if(ListInsert(H,x,e))
115         outputList(H);
116         else
117             printf("非法插入\n");
118     }
119     int D;
120     scanf("%d",&D);
121     while(D--)
122     {
123         scanf("%d",&x);
124         if(ListDelete(H,x))
125         outputList(H);
126         else
127             printf("非法删除\n");
128     }
129     return 0;
130 }样例输出:



原文地址:https://www.cnblogs.com/diandianer/p/9959860.html

时间: 2024-11-08 11:03:46

单链表的创建,插入,删除,遍历的相关文章

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

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

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

#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) #

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

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

单链表的创建算法

单链表的创建算法 当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表. 单链表的示意图如下: Head指针为单链表的头指针,单链表L:L既是单链表的名字,也是其头指针.链表中的最后一个结点的指针域定义为空指针(NULL). 单链表的定义: struct Node { ElemType data; struct Node *next; }; typedef struct Node LNode; typedef struct Node *LinkedList; 单链表有带头结点和不带头结

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

最近学习了一下单链表的操作,将代码保存如下,供以后查看. 链表创建: 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不安全之类的错误

单链表的基本操作(建立.遍历.添加.删除)

有n个元素,我们把他们用链表表示,执行一些操作在某个位置添加一个数,或者删除某个位置的数: 输入合法的代码: #include<iostream> #include<stdio.h> #include<stdlib.h> using namespace std; struct node { int date; struct node *next; }; node *CreatList(node *head, int n); void TravList(node *hea

单链表的创建以及功能的实现

#include<stdio.h> #include<stdlib.h> #include<math.h> typedef int DataType; typedef struct node{/*结点类型定义*/ DataType data;/*结点的数据域*/ struct node *next;/*结点的指针域*/ }ListNode,*LinkList; ListNode *p; LinkList head; /*注意:定义结点结构时,有几点需要注意:LinkLi

C++单链表的创建与操作

链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素.链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点.Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束.可以看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址.结点中只有一个next指针的链表称为单链表,这是最简单的链表结构. 首先定义一个

数据结构-编程实现一个单链表节点的插入

1:向链表中某个位置(第pos个节点)之后插入节点,这里分别插入到链表首部.插入到链表中间,以及链表尾端3个位置.代码如下: // ConsoleApplication15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <malloc.h> #include <iostream> using namespace std; typedef struct node//定义链表结构体 { int data;/