IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 单链表(C语言实现) -> 正文阅读

[数据结构与算法]单链表(C语言实现)

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int DataType;
typedef struct Node
{
?? ?DataType data;?? ??? ??? ??? ?//?? ?数据域?
?? ?struct Node * next;?? ??? ??? ?//?? ?指针域?
?? ?
}LinkList;

LinkList * Creat_List(int a[], int n);?? ?//?? ?创建链表?
bool Empty_List(LinkList * L);?? ??? ??? ??? ?//?? ?判空?
int Length_List(LinkList * L);?? ??? ??? ??? ?//?? ?链表长度?
void Traverse_List(LinkList * L);?? ??? ??? ?//?? ?遍历?
int Locate_List(LinkList * L, DataType x);?? ?//?? ?按值查找?
bool Get_List(LinkList * L, int pos, DataType * x);?? ?//?? ?按位查找?
bool Insert_List(LinkList * L, int pos, DataType x);//?? ?插入?
bool Delete_List(LinkList * L, int pos, DataType *x);//?? ?删除?
bool Destroy_List(LinkList * L); ?? ?//?? ?销毁链表?

int main()
{
?? ?DataType x,val;
?? ?int a[5] = {12, 24, 33, 56, 78};
?? ?
?? ?LinkList * L = Creat_List(a,5);
?? ?printf("链表元素:");
?? ?Traverse_List(L);
?? ?
?? ?if(Insert_List(L, 2, 45))
?? ?{?
?? ??? ?printf("\n插入成功!\n");
?? ??? ?printf("插入元素:45");
?? ??? ?printf("\n插入位置:第2个结点\n");?
?? ?}?? ??
?? ?else
?? ??? ?printf("\n插入失败!\n");
?? ?printf("链表元素:");
?? ?Traverse_List(L);
?? ?
?? ?if(Delete_List(L, 2, &val))
?? ?{
?? ??? ?printf("\n删除成功!\n");
?? ??? ?printf("删除元素:%d\n",val);
?? ??? ?printf("删除位置:第2个结点\n");
?? ?}
?? ?else
?? ??? ?printf("\n删除失败!\n");
?? ?printf("链表元素:");
?? ?Traverse_List(L);
?? ?
?? ?printf("\n按值查找的元素:33");
?? ?printf("\n按值查找元素的位置序号:%d\n\n",Locate_List(L,33));
?? ?
?? ?if(Get_List(L, 4, &x))
?? ?{
?? ??? ?printf("按位查找成功!\n");?? ?
?? ??? ?printf("按位查找的元素:%d\n",x);
?? ??? ?printf("按位查找的位置:第4个结点\n");
?? ?}
?? ?else?? ?
?? ??? ?printf("查找失败!\n");
?? ?
?? ?printf("\n链表长度:%d\n",Length_List(L));
?? ?printf("\n链表元素:");
?? ?Traverse_List(L);
?? ?
?? ?return 0;
}
LinkList * Creat_List(int a[], int n)
{
?? ?int i;
?? ?LinkList * L = (LinkList*)malloc(sizeof(LinkList));//?? ?创建一个头结点,返回头结点的地址?
?? ?if(!L)
?? ?{
?? ??? ?printf("申请空间失败!\n");
?? ??? ?exit(-1);
?? ?}
?? ?LinkList * Tail = L;?? ?//?? ?创建一个尾指针,指向头结点?
?? ?Tail->next = NULL;
?? ?for(i = 0; i<n; ++i)
?? ?{
?? ??? ?printf("第%d个结点的值:",i+1);
?? ??? ?printf("%d",a[i]);
?? ??? ?LinkList * p = (LinkList*)malloc(sizeof(LinkList));
?? ??? ?p->data = a[i];
?? ??? ?Tail->next = p;
?? ??? ?p->next = NULL;
?? ??? ?Tail = p;
?? ??? ?printf("\n");
?? ?}
?? ?printf("单链表创建成功!\n");
?? ?return L;
}
bool Empty_List(LinkList * L)
{
?? ?if(L->next==NULL)?? ?//?? ?头结点指针域为空,为空表?
?? ??? ?return true;
?? ?else
?? ??? ?return false;
}
int Length_List(LinkList * L)
{
?? ?int cnt = 0;
?? ?LinkList * p = L->next;
?? ?while(p!=NULL)
?? ?{
?? ??? ?cnt++;
?? ??? ?p = p->next;
?? ?}
?? ?return cnt;
}
void Traverse_List(LinkList * L)
{
?? ?LinkList * p = L->next;
?? ?while(p!=NULL)
?? ?{
?? ??? ?printf("%3d",p->data);
?? ??? ?p = p->next;
?? ?}
?? ?printf("\n");
?? ?return;
}

int Locate_List(LinkList * L, DataType x)
{
?? ?int pos = 1;
?? ?LinkList * p = L->next;
?? ?while(p->data!=x&&p!=NULL)
?? ?{
?? ??? ?pos++;
?? ??? ?p = p->next;
?? ?}
?? ?if(p!=NULL)
?? ??? ?return pos;
?? ?else
?? ??? ?return 0;
}

bool Get_List(LinkList * L, int pos, DataType * x)
{
?? ?int i = 1;
?? ?LinkList * p = L->next;
?? ?if(pos<1||pos>Length_List(L))
?? ??? ?return false;
??? ?while(i<pos&&p!=NULL)
??? ?{
??? ??? ?i++;
??? ??? ?p = p->next;
?? ?}
?? ?if(p!=NULL)
?? ?{
?? ??? ?*x = p->data;
?? ??? ?return true;?? ?
?? ?}
?? ?else
?? ??? ?return false;
}?

bool Insert_List(LinkList * L, int pos, DataType x)
{
?? ?int i = 1;
?? ?LinkList * p = L->next;
?? ?if(pos<1||pos>Length_List(L))
?? ??? ?return false;
?? ?while(i<pos-1&&p!=NULL)
?? ?{
?? ??? ?i++;
?? ??? ?p = p->next;
?? ?}
?? ?if(p!=NULL)
?? ?{
?? ??? ?LinkList * q = (LinkList *)malloc(sizeof(LinkList));
?? ??? ?if(!q)
?? ??? ?{
?? ??? ??? ?printf("申请空间失败!\n");
?? ??? ??? ?exit(-1);
?? ??? ?}
?? ??? ?q->data = x;
?? ??? ?q->next = p->next;
?? ??? ?p->next = q;
?? ??? ?return true;
?? ?}
?? ?else
?? ??? ?return false;
}

bool Delete_List(LinkList * L, int pos, DataType * x)
{
?? ?int i = 1;
?? ?LinkList * p = L->next;
?? ?if(Empty_List(L))
?? ??? ?return false;
?? ?if(pos<1||pos>Length_List(L))
?? ??? ?return false;
?? ?while(i<pos-1&&p!=NULL)
?? ?{
?? ??? ?i++;
?? ??? ?p = p->next;
?? ?}
?? ?if(p!=NULL)
?? ?{
?? ??? ?LinkList * q = p->next;
?? ??? ?*x = q->data;?
?? ??? ?p->next = q->next;
?? ??? ?free(q);
?? ??? ?return true;
?? ?}
?? ?else
?? ??? ?return false;
}
bool Destroy_List(LinkList * L)
{
?? ?LinkList * p = L;
?? ?if(Empty_List(L))
?? ??? ?return false;
?? ?while(p!=NULL)
?? ?{
?? ??? ?p = p->next;
?? ??? ?free(L);
?? ??? ?L = p;
?? ?}
?? ?L = p = NULL;?? ?// 防止产生野指针?
?? ?return true;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 13:04:40  更:2021-10-27 13:06:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:43:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码