数据结构单链表入门代码
Posted 若你遇见她
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构单链表入门代码相关的知识,希望对你有一定的参考价值。
本人当初在学习数据结构的时候,一直搞不清楚代码(其实就是自己没练)。现在自己学后。就写了一个之前在网上抄作业看见的输出一样的程序。希望可以帮助学弟学妹们学习理解链表代码的编写。因为网上叙述链表原理的博客和文章特别多。我这里就不赘述了。上代码。
ps:因为是我自己按照自己的想法来写的,肯定不是最优解。望各位大佬见谅。
// hello Word.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include<malloc.h> //分配内存
#include<stdio.h> //
typedef struct ListNode
int data; //数据存放点
struct ListNode* next; //后继指向
ListNode; //结构体别名
//链表生成函数,返回类型为ListNode节点类型(返回头节点)
ListNode*Initlist(int n) //n链表为长度
ListNode *head, *p, * s; //头结点,链表构建指针变量,链表接入指正变量
head = (ListNode*)malloc(sizeof(ListNode));//固定语法,动态分配内存给头结点
head->next = NULL; //现在还是空链表,末尾指向NULL
int i = 1;
p = head;
while(n)
printf("请输入第""%d""节点的值",i);
s = (ListNode*)malloc(sizeof(ListNode));//接入的指针变量的动态内存分配
scanf_s("%d", &s->data ); //输入数据
s->next = NULL; //尾结点指向空
p->next = s; //将s点链接到p后面
p = p->next; //p指向其下一节点,即s点
n-=1; //剩余长度值修正
i++;
return head; //返回头结点
链表增加函数
ListNode* Add(ListNode* head,int opo,int data)//opo为添加的位置,date为需要添加的数据
ListNode* p = head; //建立指向点,并指向头结点
for (int i = 1; i < opo; i++) //找出需要添加位置的上一节点。
if (p->next == NULL) //若链表下一级指向空,则证明已经到达链表最后节点
printf("链表长度不够,无法插入");
return NULL;
// break;
p = p->next;
//插入
ListNode* a = (ListNode*)malloc(sizeof(ListNode));
a->data = data;
a->next = p->next;
p->next = a;
return head;
按照位删除
ListNode* Dele(ListNode* head, int e)
ListNode* p = head;
for(int i=1;i<e;i++)
if (p->next == NULL)
printf("你要删除的位置大于链表长度");
printf("\\n");
return head;
p = p->next;
//删除
p->next = p->next->next;
return head;
/按位更改
ListNode* Correct(ListNode* head,int opo,int data)
ListNode* p = head;
for (int i = 1; i <= opo; i++)
if (p->next == NULL)
printf("你要更改的位置不存在");
printf("\\n");
return head;
p = p->next;
p->data = data;
return head;
/按位查找
ListNode* find(ListNode* head,int opo,int len)
ListNode* p = head;
int i = 1;
if(opo>len) //检查该位置是否超出链表最大长度
printf("该位置超出最大链表长度");
return head;
for (i; i <= opo;i++) //开始检索该位置
p = p->next;
printf("你找的数据为""%d\\n", p->data);
return head;
按照值删除
ListNode* DDele(ListNode* head, int data,int len)
ListNode* h = head;
ListNode* p = h->next;
int w = 1;// while (p->next)
for(int i = 1;i<=len;i++)
if (p->data == data)
if (p->next == NULL) //尾结点
h->next = NULL;
w++;
continue;
else if(p->next) //普通节点
h->next = p->next;
p = p->next;
w++;
continue;
h = h->next;//若非需要的值就直接下一跳
p = p->next;
if (w == 1)
printf("该值不存在链表中\\n");
return head;
//按值更改
ListNode* DCorrect(ListNode* head,int data1,int data2,int len)
ListNode* p = head;
int w = 0;
for (int i = 0; i <= len; i++)
if (p->data == data1)
p->data = data2;
w++;
p = p->next;
if (w == 0)
printf("本链表中不存在该数\\n");
return head;
///按值查找
ListNode* Dfind(ListNode* head,int data,int len)
ListNode* p = head;
int w = 0;
for (int i = 0; i < len; i++)
if (p->data == data)
printf("该数据的位置为""%d\\n",i);
w++;
p = p->next;
if (w == 0)
printf("该链表中不存在该值\\n");
return head;
打印链表函数
void display(ListNode* head)
ListNode* p = head; //实例化一个结构体,并指向头结点。以此来作为打印点
printf("链表当前状态为");
while (p->next)
p = p->next;
printf("%d", p->data);
printf("\\n");
//主函数
int main()
int len,data,opo; //定义链表长度,添加值,位置
int data1,data2,dos;
printf(" 欢迎进入林哥链表模拟器 \\n"); //装逼
printf("请输入你需要的链表长度"); //生成长度
scanf_s("%d", &len);
ListNode* p = Initlist(len); //链表生成
display(p); //链表打印
printf("\\n");
while (1)
printf("按位置增加输入 1 按照位置删除输入 2\\n");
printf("按位置改动输入 3 按照位置查找输入 4\\n");
printf("按数据删除输入 5 按照数据更改输入 6\\n");
printf("按数据查找输入 7 \\n");
scanf_s("%d", &dos);
if (dos == 1)
printf("请输入需要插入的位置"); ///插入
scanf_s("%d", &opo);
printf("请输入需要插入的值");
scanf_s("%d", &data);
p = Add(p, opo, data);
display(p); //链表打印
printf("\\n");
else if (dos == 2)
printf("请输入需要删除的位置"); //按位删除
scanf_s("%d", &opo);
p = Dele(p, opo);
display(p);
printf("\\n");
else if (dos == 3)
printf("请输入需要更改的位置"); //按位更改
scanf_s("%d", &opo);
printf("请输入需要更改进入的值");
scanf_s("%d", &data);
p = Correct(p, opo, data);
display(p);
printf("\\n");
else if (dos == 4) //按位查找
printf("请输入你需要寻找的位置");
scanf_s("%d", &opo);
p = find(p, opo, len);
display(p);
printf("\\n");
else if (dos == 5) //按数据删除
printf("请输入需要删除的值");
scanf_s("%d", &data);
p = DDele(p, data, len);
display(p);
printf("\\n");
else if (dos == 6) //按照数据更改
printf("请输入你需要寻找的值");
scanf_s("%d", &data1);
printf("请输入你需要寻跟换的值");
scanf_s("%d", &data2);
p = DCorrect(p, data1, data2, len);
display(p);
printf("\\n");
else if (dos == 7) //按照数据寻找
printf("请输入你需要寻找位置的值");
scanf_s("%d", &data);
p = Dfind(p, data, len);
display(p);
printf("\\n");
else
break;
printf("拜拜");
以上是关于数据结构单链表入门代码的主要内容,如果未能解决你的问题,请参考以下文章