#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
//初始化单链表
bool initList(LinkList& L)
{
L = (LinkList)malloc(sizeof(LNode));
//static_assert(L!=NULL);
L->next = NULL;
return true;
}
//头插法 LNode*(强调结点)=LinkList(强调单链表的指针)
LNode* creatList(LinkList& L)
{
LNode* S;
int x;
scanf("%d", &x);
while (x != 0)
{
S = (LNode*)malloc(sizeof(LNode));
S->data = x;
S->next = L->next;
L->next = S;
scanf("%d", &x);
}
return L;
}
//尾插法
LNode* tailPlugList(LinkList& L)
{
LinkList s, r = L;
int x;
scanf("%d", &x);
while (x != 0)
{
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
if (L->next == NULL)
{
s->next = r->next;
r->next = s;
r = s;
}
r->next = s;
r = s;
scanf("%d", &x);
}
r->next = NULL;
return L;
}
//按索引查找
LNode* LocateList(LinkList L, int i)
{
LNode* p;
p = L->next;
int j = 1;
if (i == 0)
{
return L;
}
if (i < 1)
{
return NULL;
}
while (p && j < i)
{
p = p->next;
j++;
}
return p;
}
//按值查找
LNode* getElemList(LinkList L, int x)
{
LNode* p = L->next;
while (p && p->data != x)
{
p = p->next;
}
return p;
}
//按索引将值插入链表
bool insertList(LinkList& L, int i, int x)
{
LinkList temp = LocateList(L, i - 1);
if (NULL == temp) return false;
if (i < 1) return false;
LinkList s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = temp->next;
temp->next = s;
return true;
}
//按值删除链表
bool deleteList(LinkList& L, int i)
{
LinkList temp = L;
if (L)
{
temp = LocateList(L, i - 1);
}
LinkList s = temp->next;
if (s)
{
temp->next = s->next;
}
free(s);
return true;
}
//输出链表
void printList(LinkList L)
{
L = L->next;
while (L != NULL)
{
printf("%d ", L->data);
L = L->next;
}
}
//int main()
//{
// LinkList L;
// LinkList T;
//
// initList(L);
// //creatList(L);
// tailPlugList(L);
// printList(L);
//
// T = LocateList(L, 2);
// if (T)
// {
// printf("\n第2个位置的值=%d", T->data);
// }
//
// T = getElemList(L, 5);
// if (T)
// {
// printf("\n5存在=%d", T->data);
// }
// deleteList(L, 2);
// printf("\n删除第二个元素后的链表:\n");
//
// printList(L);
//
// insertList(L, 2, 6);
// printf("\n在第二个位置插入6后的链表:\n");
// printList(L);
//
// return 0;
//}
数据结构之单链表基本功能实现
最新推荐文章于 2024-09-14 15:47:59 发布
本文详细介绍了如何使用C语言实现单链表的基本功能,包括创建链表、插入节点、删除节点和打印链表等操作。通过实例代码解析,帮助读者理解单链表的数据结构及其操作方法。
摘要由CSDN通过智能技术生成