单链表的初始化,建立,插入,查找,删除。

#include <stdio.h>

#include <stdlib.h>

typedef int ElemType;

//定义结点类型

typedef struct Node

{

ElemType data;              //单链表中的数据域

struct Node *next;          //单链表的指针域

}Node,*LinkedList;

//单链表的初始化

LinkedList LinkedListInit()

{

Node *L;

L = (Node *)malloc(sizeof(Node));   //申请结点空间

if(L == NULL)                       //判断是否有足够的内存空间

printf("申请内存空间失败\n");

L->next = NULL;                  //将next设置为NULL,初始长度为0的单链表

return L;

}

//单链表的建立1,头插法建立单链表

LinkedList LinkedListCreatH()

{

Node *L;

L = (Node *)malloc(sizeof(Node));   //申请头结点空间

L->next = NULL;                      //初始化一个空链表

ElemType x;                         //x为链表数据域中的数据

while(scanf("%d",&x) != EOF)

{

Node *p;

p = (Node *)malloc(sizeof(Node));   //申请新的结点

p->data = x;                     //结点数据域赋值

p->next = L->next;                    //将结点插入到表头L-->|2|-->|1|-->NULL

L->next = p;

}

return L;

}

//单链表的建立2,尾插法建立单链表

LinkedList LinkedListCreatT()

{

Node *L;

L = (Node *)malloc(sizeof(Node));   //申请头结点空间

L->next = NULL;                  //初始化一个空链表

Node *r;

r = L;                          //r始终指向终端结点,开始时指向头结点

ElemType x;                         //x为链表数据域中的数据

while(scanf("%d",&x) != EOF)

{

Node *p;

p = (Node *)malloc(sizeof(Node));   //申请新的结点

p->data = x;                     //结点数据域赋值

r->next = p;                 //将结点插入到表头L-->|1|-->|2|-->NULL

r = p;

}

r->next = NULL;

return L;

}

//单链表的插入,在链表的第i个位置插入x的元素

LinkedList LinkedListInsert(LinkedList L,int i,ElemType x)

{

Node *pre;                      //pre为前驱结点

pre = L;

int tempi = 0;

for (tempi = 1; tempi < i; tempi++)

pre = pre->next;                 //查找第i个位置的前驱结点

Node *p;                                //插入的结点为p

p = (Node *)malloc(sizeof(Node));

p->data = x;

p->next = pre->next;

pre->next = p;

return L;

}

//单链表的删除,在链表中删除值为x的元素

LinkedList LinkedListDelete(LinkedList L,ElemType x)

{

Node *p,*pre;                   //pre为前驱结点,p为查找的结点。

p = L->next;

while(p->data != x)              //查找值为x的元素

{

pre = p;

p = p->next;

}

pre->next = p->next;          //删除操作,将其前驱next指向其后继。

free(p);

return L;

}

int main()

{

LinkedList list,start;

printf("请输入单链表的数据:");

list = LinkedListCreatH();

for(start = list->next; start != NULL; start = start->next)

printf("%d ",start->data);

printf("\n");

int i;

ElemType x;

printf("请输入插入数据的位置:");

scanf("%d",&i);

printf("请输入插入数据的值:");

scanf("%d",&x);

LinkedListInsert(list,i,x);

for(start = list->next; start != NULL; start = start->next)

printf("%d ",start->data);

printf("\n");

printf("请输入要删除的元素的值:");

scanf("%d",&x);

LinkedListDelete(list,x);

for(start = list->next; start != NULL; start = start->next)

printf("%d ",start->data);

printf("\n");

return 0;

}

时间: 2024-11-08 02:02:54

单链表的初始化,建立,插入,查找,删除。的相关文章

线性单链表的初始化、插入、删除功能实现

1 ////////////////////////////////////////////////////////// 2 // singlelist.cpp 3 // 4 // author:Leetao 5 ////////////////////////////////////////////////////////// 6 // 简介: 7 // 线性链表的实现 8 ////////////////////////////////////////////////////////// 9

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

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

单链表的读取、插入与删除

链表是由一个个结点构成,而每一个结点都是由存储数据的数据域以及存储下一个结点地址的地址域两部分构成. 链表的一大优点就是,可以在任意两个数之间毫无限制的插入无限多的数据.在很多时候,我们都需要对数据做个查找工作,就比如,一个班的同学去上课,结果老师发现人数不对,于是就开始点名,点到后来发现某某某同学没有到,这就是典型的数据查找.那么如何实现对链表的数据元素的查找呢? 比如,我想知道链表的第5个元素的值是多少,我应该怎么做呢?由于,链表是依靠地址来查找数据的,那比如说链表的第一个结点的数据域中保存

单链表的使用(插入,查找,删除,链表的倒置,删除相同结点)

typedef struct node//该结构体代表一个结点{ int data; //结点的数据域 struct node *next; //结点的指针域}lnode,*linklist; //定义一个结构体变量和指向结构体的指针//用头插法创建一个链表linklist create_begin(){ linklist head=(linklist)malloc(sizeof(lnode));//定义头结点并开辟空间 head->next=NULL; //为避免指针乱指,将头结点下一个指针赋

创建一个单链表,实现头部插入和尾部插入

/*目的:创建一个单链表,实现尾部插入,头部插入,遍历链表*/ #include <stdio.h>#include <string.h>#include <stdlib.h> //定义一个结构体,用来表示一个节点,包含指针域,数据域 struct node{ int data; //数据域 struct node *next; //指针域,指向节点的指针,用来连接两个节点}; //定义一个函数,用来创建节点,为节点分配堆内存,由于堆内存残留有随机值,创建成功后清空内存

单链表的初始化和创建(尾插法)

1 #include<stdlib.h> 2 #include<stdio.h> 3 typedef struct Node 4 { 5 int data; 6 struct Node *next; 7 }Node,*LinkList; 8 9 void initList(LinkList *L) 10 { 11 (*L) = NULL; 12 printf("初始化成功\n"); 13 } 14 15 LinkList creatList(int n) 16

手写BST插入查找删除

binary search\sort\find tree operations status InsertNode(Node* root, data x, Node* father) { if(root==NULL) { if(father==NULL) Tree empty; else { if(x<father->data) { father->left=new Node//inital left right NULL father->left->data=x; retu

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

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

单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作

很早之前学的数据结构,放了很久后,以致对里面的一些操作都有些遗忘,故而再次温习了一下数据结构,并整理了一点儿笔记,放在这里和大家分享, 我的代码注释的已经很详细了,对于容易出错的地方我也都有标注,欢迎大家交流. #include "stdafx.h" #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <time.h> #define OK 1 #defi