当前位置:网站首页>2021-04-12 链表第一次实现!!!
2021-04-12 链表第一次实现!!!
2022-06-23 09:41:00 【Mr. Rabbit.】
#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
typedef struct Node
{
DataType Data;
struct Node*Next;
}Node;
typedef struct Node *LinkList;
int InitList(LinkList *L) //带有头节点的单链表的初始化
{
(*L) = (LinkList)malloc(sizeof(Node));
if (!L)
{
printf("分配内存失败!\n");
exit(0);
}
(*L)->Next = NULL;
return 0;
}
int ListEmpty(LinkList H)//就是看头结点的指针域是否为空;
{
return H->Next==NULL;
}
void CreatFormHead(LinkList H)//逆序;
{
DataType data;//建立一个data型的数据类型;
Node*s;//需要插入的结点指针;
scanf("%d",&data);//给数据域赋值;
while(data!=-1)
{
s=(Node*)malloc(sizeof(Node));//给插入的节点分配空间;
s->Data=data;//给结点的数据域赋值;
s->Next=H->Next;
H->Next=s;//头插法的最重要两步骤;
scanf("%d",&data);//继续赋值;
}
}
void CreatFormTail(LinkList H)//顺序;
{
Node*tail;
tail=H;
DataType data;//建立一个data型的数据类型;
Node*s;//需要插入的结点指针;
scanf("%d",&data);//给数据域赋值;
while(data!=-1)
{
s=(Node*)malloc(sizeof(Node));//给插入的节点分配空间;
s->Data=data;//给结点的数据域赋值;
s->Next=tail->Next;
tail->Next=s;//头插法的最重要两步骤;
tail=s;//tail始终指向尾部;
scanf("%d",&data);//继续赋值;
}
}
Node*Get(LinkList H,int i)
{
Node*p;//结点指针;
int j=0;
p=H;
if(ListEmpty(H))//空表;
{
printf("表为空!/n");
return 0;
}
while(!ListEmpty&&j<i)
{
p=p->Next;
j++;
}
if(j==0)
return p;
return NULL;
}
int Locate(LinkList H,DataType data)//按值查找;
{
Node*p=H->Next;
int i=1;
while(p)
{
while(p->Data!=data)
{
p=p->Next;
i++;
}
break;
}
return i;
}
int length(LinkList H)//求表长;
{
Node*p;
p=H;
int len=0;
while(p->Next!=NULL)
{
len++;
p=p->Next;
}
return len;
}
void InsList(LinkList H,int i,DataType data)//插入操作;
{
Node*p;
Node*s;
p=H;
int j=0;
while(p->Next!=NULL&&j<i-1)
{
p=p->Next;
j++;
}
if(p==NULL)
{
return;
}
s=(Node*)malloc(sizeof(Node));
s->Data=data;
s->Next=p->Next;
p->Next=s;
}
int DelList(LinkList H,int i,DataType*data)//删除操作;
{
Node*p;
Node*s;
p=H;
int k=0;
while(i<0||i>length(H))
{
printf("删除位置不合法!");
return 0;
}
if(p->Next!=NULL&&k<i-1)
{
p=p->Next;
k++;
}
s=p->Next;
*data=s->Data;
p->Next=s->Next;
free(s);
return *data;
}
void DestoryList(LinkList H)//销毁链表;
{
Node*p;
Node*q;
p=H;
while(p->Next!=NULL)
{
q=p;
p=p->Next;
free(q);
}
}
void PrintList(LinkList H)
{
Node*p;
p=H->Next;
while(p)
{
printf("%d",p->Data);
p=p->Next;
}
printf("\n");
}
int main()
{
LinkList(L);
LinkList(L1);
DataType data;
int num;//需要操作的元素序号
int val;//插入元素值
InitList(&L);
InitList(&L1);
printf("头插法建表(L1):\n");
CreatFormHead(L1);
printf("链表中的元素有:\n");
PrintList(L1);
printf("\n");
printf("尾插法建表(L):");
CreatFormTail(L);
printf("链表中的元素有:\n");//后面为对尾插法所建表的操作
PrintList(L);
printf("\n");
printf("在链表中插入一个元素:\n");
printf("请输入插入位置:");
scanf("%d",&num);
printf("请输入插入元素值:");
scanf("%d",&val);
InsList(L,num,val);
printf("链表中的元素有:\n");
PrintList(L);
printf("\n");
printf("删除链表中的元素:\n");
printf("请输入删除位置:");
scanf("%d",&num);
DelList(L,num,&data);
printf("删除元素的值为%d\n",data);
printf("\n");
printf("链表中的元素有:\n");
PrintList(L);
printf("\n");
printf("链表的长度为:%d\n",length(L));
printf("\n");
printf("请输入要查找的元素序号:\n");
scanf("%d",&num);
Node*p=Get(L,num);
printf("第%d个元素值为:%d\n",num,p->Data);
printf("请输入要查找的元素值:\n");
scanf("%d",&val);
printf("%d在表中的位置序号为:%d\n",val,Locate(L,val));
printf("\n");
system("pause");
return 0;
}
参考曹记东老师
```c
在这里插入代码片
边栏推荐
- 安装typescript环境并开启VSCode自动监视编译ts文件为js文件
- Difference between global shutter and roller shutter
- MySQL optimistic lock and pessimistic lock
- Typora set up image upload service
- [GYCTF2020]Blacklist
- UEFI源码学习3.7 - NorFlashDxe
- Redis learning notes - redis and Lua
- 16. system startup process
- [wangdingbei 2020 Qinglong formation]areuserialz
- What is a closure function
猜你喜欢

Set the CPU to have 16 address lines and 8 data lines, and use mreq as the access control line number Connection between memory and CPU

Thin film interference data processing

UEFI source code learning 4.1 - pcihostbridgedxe
![[plugin:vite:import-analysis]Failed to resolve import “@/“ from ““.Does the file exist](/img/1f/dde52dc63de58d67f51161e318a9fb.png)
[plugin:vite:import-analysis]Failed to resolve import “@/“ from ““.Does the file exist

分布式锁的三种实现方式
[nanopi2 trial experience] the first step of bare metal
Redis learning notes pipeline

Alimentation des animaux de compagnie basée sur stm32

J. Med. Chem. | Release: a new drug design model for deep learning based on target structure
![[MRCTF2020]Ez_ bypass](/img/cd/bd6fe5dfc3f1942a9959a9dab9e7e0.png)
[MRCTF2020]Ez_ bypass
随机推荐
AI: the Elephant in Room
ThinkPHP 2.x/3.0 漏洞复现
Multithreaded exercises
Cesium loading orthophoto scheme
给RepVGG填坑?其实是RepVGG2的RepOptimizer开源
Redis learning notes - single key management
快速排序的简单理解
Distributed common interview questions
Centre de calcul haute performance - nvme / nvme - of - nvme - of overview
什么是BFC?BFC可以解决什么问题
The usage of lambda of C
CVPR大会现场纪念孙剑博士,最佳学生论文授予同济阿里,李飞飞获黄煦涛纪念奖...
高性能算力中心 — InfiniBand — Overview
Gorm 高级查询
Basic use of lua
Jump game of leetcode topic analysis
Find minimum in rotated sorted array
【CTF】 2018_ rop
[GYCTF2020]Blacklist
[ciscn2019 North China Day2 web1]hack world