#include<stdio.h>
#include<stdlib.h>
//单链表:带头结点或者不带头结点
给变量起一个别名,方便后面修改
typedef int E;
typedef struct ListNode * Node;
//结点
struct ListNode {
E element;//存储的数据
struct ListNode * next;//指向下一个结点的指针
};
//创建头结点
//变量指针
void initList(Node node)
{
node->next=NULL;
}
//链表插入结点
//变量链表头结点,插入元素,插入位序
//时间复杂度O(n)
int insertList(Node head,E element,int index)
{
//位序不符合插入失败
if(index<1)
{
return 0;
}
while(index!=0)
{
head = head->next;
//越界
if(head==NULL)
{
return 0;
}
index--;
}
Node node = malloc(sizeof(struct ListNode));
if(node==NULL)
{
//扩容失败
return 0;
}
node->element=element;
node->next=head->next;
head->next=node;
}
//链表删除结点
//变量链表头结点,删除位序
//时间复杂度O(n)
int deleteList(Node head,int index)
{
//位序不符合删除失败
if(index<1)
{
return 0;
}
while(index!=0)
{
head = head->next;
//越界
if(head->next==NULL)
{
return 0;
}
index--;
}
Node timenode = head->next;
head ->next = head->next->next;
free(timenode);
}
//获取对应位置的元素
//变量链表头结点,查找位序
//时间复杂度O(n)
E getList(Node head,int index)
{
//位序不符合获取失败
if(index<1)
{
return 0;
}
do
{
head = head->next;
//越界
if(head==NULL)
{
return 0;
}
}
while(index!=0);
return head->element;
}
//查找元素的位置
//变量链表头结点,查找的元素
int findList(Node head,E element)
{
//计数器
int i = 1;
//走到第一个结点开始判断
head = head->next;
do
{
if(head->element==element)
{
return i;
}
head = head->next;
i++;
}
while(head->next!=NULL);
//未找到
return 0;
}
//链表长度
//变量链表头结点
int sizeList(Node head)
{
int i = 1;
head = head->next;
while(head!=NULL)
{
i++;
head = head->next;
}
return i;
}
int main()
{
//定义一个头结点指针(空的头结点)
struct ListNode head;
//创建头结点
initList(&head);
}
数据结构笔记(二)链表
于 2024-03-10 19:48:30 首次发布