最近在学数据结构,需要用C语言实现功能
上掘金一搜,发现线性表代码实现的文章里面的代码要么就是用JAVA实现,那些大学老师不一定能看得懂JAVA,要么就是咔咔把代码剪成几段放上来,根本运行不了,有的压根就不是完整的代码,就放几个函数上去
我就是不会才来看啊,想着抄一个现成的,结果我还得补全代码
经过我东拼西凑,弄出来线性表C语言实现的完整代码,自己运行了几遍没问题
顺序栈
#include <stdio.h>
#include <malloc.h>
// 定义单链表中的节点
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList; // 定义两个名称 前者侧重于表示节点, 后者侧重于表示单链表
// 头插法建立单链表
LinkList List_HeadInsert(LinkList L)
{
int x = 0;
LNode *s;
L = (LinkList)malloc(sizeof(LNode)); // 创建头节点
L->next = NULL;
for (int i = 0; i < 5; i++) // 初始化一个长度为5的链表
{
s = (LNode *)malloc(sizeof(LNode)); // 创建新节点
s->data = x; // 输入节点的初始值
s->next = L->next; // 新节点的后向指针指向头节点的后向指针
L->next = s; // 头节点的后向指针指向新节点 , 完成头插
x++; // 指定数据+1, 此处可DIY
}
return L;
}
// 尾插法建立单链表
LinkList List_TailInsert(LinkList L)
{
int x = 0;
LNode *s, *T; // T为表尾指针
L = (LinkList)malloc(sizeof(LNode)); // 创建头节点
s, T = L; // 先初始化指向头节点
for (int i = 0; i < 5; i++)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = x;
T->next = s; // 此处是让前节点的后向指针指向新节点
T = s; // T指向新的表尾节点
}
T->next = NULL; // 表尾指向NULL
return L;
}
// 按序号查找节点值
LNode *GetElem(LinkList L, int i)
{
int count = 1; // 计数变量
LNode *p = L->next; // 头节点next赋给P
if (i == 0)
{
return L; // i = 0返回头节点
}
if (i < 1)
{
printf("%s", "warn input!");
return NULL; // 错误序号
}
while (p && count < i)
{ // 从第一个节点开始找, 查找第i个节点, 此处判断即是判断时候到最后null的时候任然没有找到节点.
p = p->next;
count++;
}
return p;
}
// 插入新数据元素 i:插入位置, elem:插入元素值
LNode *InsetElem(LinkList L, int i, int elem)
{
LNode *preNode = GetElem(L, i - 1);
LNode *newNode = (LNode *)malloc(sizeof(LNode));
newNode->data = elem;
newNode->next = preNode->next;
preNode->next = newNode;
return L;
}
// 删除元素
LNode *delElem(LinkList L, int i)
{
LNode *preNode = GetElem(L, i - 1);
preNode->next = preNode->next->next;
free(preNode->next);
return L;
}
// 更改(更新元素)
LNode *changeElem(LinkList L, int i, int elem)
{
LNode *Node = GetElem(L, i);
Node->data = elem;
return L;
}
int main(int argc, char const *argv[])
{
LinkList list;
LinkList L = List_HeadInsert(list);
InsetElem(L, 2, 88);
// delElem(L, 2);
changeElem(L, 2, 8998);
LNode *Node1 = GetElem(L, 2);
printf("%d", Node1->data);
return 0;
}