带头结点的单链表
作者:
只想白嫖
,
2023-03-18 11:25:40
,
所有人可见
,
阅读 219
/*
1. 单链表:带头结点;不带头结点
--创销增删查改 表长(头插,尾插,随机插)
2. 双链表:带头结点;不带头结点
--创销增删查改 表长(头插,尾插,随机插)
3. 栈
顺序栈,共享栈,链栈
--入栈,出栈,判空,判满;
4. 队列
循环队列,链队;
5. 栈的应用
中缀转后缀,后缀求值;中缀求值
*/
//头结点链表:
#include <bits/stdc++.h>
typedef struct LNode//定义链表结点
{
int data;
struct LNode *next;
}LNode, *LinkList;
bool InitList(LinkList &L)//链表初始化
{
L = (LNode *) malloc(sizeof (LNode));
if(L == NULL)
return false;
L->next = NULL;
return true;
}
bool Empty(LinkList L)//链表是否为空
{
return (L->next == NULL);
}
LNode *GetElem(LinkList L, int i)//按位查找--返回第i个结点,也可返回第0个结点即头结点
{
if(i < 0) return NULL;
LNode *p = L;
int j = 0;
while(p != NULL && j < i)
{
p = p->next;
j ++;
}
return p;
}
bool ListInsert(LinkList &L, int i, int e)//第i个位置插入e,i>1
{
if(i < 1) return false;
LNode *p = GetElem(L, i - 1);//找到第i-1个结点
if(p == NULL) return false;//链表无第i位置
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
bool ListDelete(LinkList &L, int i, int &e)//删除第i个结点,并将该结点值返回,i>1
{
if(i < 1) return false;
LNode *p = GetElem(L, i - 1);//找到第i-1个结点
if(p == NULL) return false;//链表无第i位置
LNode *s = p->next;
e = s->data;
p->next = s->next;
free(s);//释放缓存
return true;
}
LNode *LocateElem(LinkList L, int e)//按值查找--返回第一个==e的结点
{
LNode *p = L->next;
while(p != NULL && p->data != e) p = p->next;
return p;
}
int Length(LinkList L)//求表长
{
LNode *p = L;
int len = 0;
while(p->next != NULL) p = p->next, len ++;
return len;
}
int main()
{
return 0;
}