#include <cstdlib>
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
/*c++实现简单的单链表操作*/
using namespace std;
typedef struct student
{
int data;
struct student *next;
}node;
//建立单链表
node *creat()
{
node *head,*p,*s;
int x,cycle=1;
head=(node *)malloc(sizeof(node));
p=head;
while(cycle)
{
printf("\nplease input the data:");
scanf("%d",&x);
if(x!=0)
{
s=(node *)malloc(sizeof(node));
s->data=x;
printf("\n%d",s->data);
p->next=s;
p=s;
}
else
cycle=0;
}
head=head->next;
p->next=NULL;
printf("\n yyy %d",head->data);
return head;
}
//单链表插入
node *insert(node *head,int num)
{
node *p0,*p1,*p2;
p1=head;
p0=(node *)malloc(sizeof(node));
p0->data=num;
while(p0->data>p1->data&&p1->next!=NULL)
{
p2=p1;p1=p1->next;
}
if(p0->data<=p1->data)
{
if(head==p1)
{
p0->next=p1;
head =0;
}
else
{
p2->next=p0;
p0->next=p1;
}
}
else
{
p1->next=p0;
p0->next=NULL;
}
return head;
}
//单链表测长
int length(node *head)
{
int n=0;
node *p;
p=head;
while(p!=NULL)
{
p=p->next;
n++;
}
return n;
}
//单链表删除某个元素
node *delNode(node *head,int num)
{
node *p1,*p2;
p1=head;
while(num!=p1->data&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->data)
{
if(p1==head)
{
head=p1->next;
free(p1);
}
else
p2->next=p1->next;
}
else
printf("\n%d could not been found!",num);
return head;
}
//单链表逆
node *reverse(node *head)
{
node *p1,*p2,*p3;
if(head==NULL||head->next==NULL)
return head;
p1=head,p2=head->next;
while(p2)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
head->next=NULL;
head=p1;
return head;
}
//打印单链表
void print(node *head)
{
node *p;
int n;
n=length(head);
printf("\nNow,These %d record are:\n",n);
p=head;
if(head!=NULL)
while(p!=NULL)
{
printf("\n uuu %d ",p->data);
p=p->next;
}
}
int main(int argc, char *argv[])
{
node *list=creat();
print(list);
list = delNode(list,2);
print(list);
int x;
cin>>x;
list=insert(list,x);
print(list);
list=reverse(list);
print(list);
system("PAUSE");
return EXIT_SUCCESS;
}
分享到:
相关推荐
本文将详细探讨如何实现带头结点单链表的基本操作,包括逆序建立链表、插入和删除等操作。 首先,我们定义单链表节点的结构体: ```cpp struct ListNode { int data; // 存储数据 ListNode* next; // 指向下一个...
1、单链表基本操作的实现 [问题描述]要在带头结点的单链表h中第i个数据元素之前插入一个数据元素x ,首先需要在单链表中寻找到第i-1个结点并用指针p指示,然后申请一个由指针s 指示的结点空间,并置x为其数据域值,...
比较不错的一个实现单链表 基本操作 其中有初始化 输出 插入 删除 测长等一系列
这个压缩包文件“单链表基本操作.rar”包含了一个名为“单链表基本操作.docx”的文档,我们可以从中学习到关于单链表的各种核心概念和操作。 单链表是由一系列节点构成的线性数据结构,每个节点包含两部分:数据域...
在这个基于Java实现的单链表基本操作项目中,我们主要关注的是链表的排序。下面将详细讲解单链表的基本概念、Java中如何实现单链表以及如何进行链表排序。 **一、单链表的基本概念** 单链表是由一系列节点组成的...
在这个“单链表基本操作验证源代码”中,我们可以期待找到实现这些基本操作的C语言或类似编程语言的源代码。以下是关于单链表及其常见操作的详细解释: 1. **建立链表**:建立链表通常涉及创建一个头节点,它不存储...
逆序数据建立链表pta---- 目录 单链表定义与特点 单链表的C语言描述 单链表基本形态 单链表基本操作实现 单链表的运用
本项目聚焦于Java实现的单链表基本操作,特别是链表的合并这一关键操作。下面将详细介绍单链表的概念、基本操作以及如何在Java中实现链表合并。 单链表是一种线性数据结构,每个节点包含两部分:数据域,用于存储...
### 单链表基本操作-面试必备 #### 知识点概述 单链表是数据结构中的一个重要概念,尤其在编程面试中极为常见。本文将详细介绍单链表的基本操作及其在C语言中的实现方法,包括创建、遍历、释放、计数、查找以及...
C语言单链表基本操作大全 本文档为C语言单链表基本操作大全,涵盖了链表的初始化、插入、删除、查找、逆置、合并等基本操作。 链表初始化 链表初始化是指对链表进行初始化操作,使链表准备好进行后续的操作。链表...
### 单链表基本操作详解 #### 一、创建单链表 单链表是一种常见的线性数据结构,它由一系列节点组成,每个节点至少包括两部分:存储数据的数据域和指向下一个节点的指针域。为了更好地管理和操作单链表,通常会...
单链表基本操作(建立 插入 删除元素等基本操作)
### 数据结构实验二:单链表基本操作 #### 实验目的 本次实验旨在通过实际编程实践,帮助学生理解和掌握单链表的基本概念及其操作方法。具体目标包括: 1. **理解单链表的结构和特点**:单链表是一种线性表存储...
在这个基于Java实现的单链表基本操作中,我们将重点关注链表反转这一特定操作。 链表反转是编程面试中常见的问题,它要求我们改变链表中节点的顺序,使得原链表的最后一个节点成为新链表的第一个节点,原链表的第一...
### 实验一 单链表基本操作的实现 #### 一、实验背景与目标 本实验旨在通过实际编程练习,帮助学生深入理解并掌握单链表这一数据结构的基础概念及其基本操作的实现方法。单链表是一种常见的线性数据结构,它通过一...
单链表是一种基础的数据结构,它由一系列...总结来说,这个项目是关于使用C语言实现单链表基本操作的示例,包括创建、插入、删除、查找和打印链表节点。通过这些操作,我们可以理解和掌握链表数据结构的使用和管理。
链表 链表_基于Java的单链表基本操作之删除操作