标签:操作 分配 void lse 编写 std eof data 内存分配
编写代码过程中,涉及动态内存分配等常用的函数,需要引入如下头文件
#include<stdio.h>
#include<stdlib.h>
// 定义一个 结构体
typedef struct Node
{
int data;
struct Node * next;
} NODE, *PNODE;
PNODE init(); // 初始化
void show(PNODE pHead); // 列出所有元素
int isEmpty(PNODE pHead); // 是否为空
void append(PNODE pHead, int val); // 追加
void insert(PNODE pHead, int pos, int val); // 插入
void delete(PNODE pHead, int pos, int * pVal); // 删除
初始化操作生成一个头结点,将头节点的地址返回即完成初始化操作
PNODE init()
{
PNODE pHead = (PNODE) malloc(sizeof(NODE));
if (NULL == pHead)
{
printf("内存分配失败");
exit(-1);
}
pHead->next=NULL;
return pHead;
}
如果头结点指向的后继节点为空,则表示该链表为空
int isEmpty(PNODE pHead)
{
if (pHead->next==NULL)
{
return 1;
}
return 0;
}
从首节点开始,依次遍历后继节点
void show(PNODE pHead)
{
if (isEmpty(pHead))
{
printf("链表元素为空\n");
} else
{
PNODE p = pHead->next;
while (p!=NULL)
{
printf("%d,", p->data);
p=p->next;
}
printf("\n");
}
}
通过 while 找到尾节点,在尾节点后加节点
void append(PNODE pHead, int val)
{
PNODE p = pHead;
while (p->next!=NULL)
{
p=p->next;
}
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("内存分配失败");
exit(-1);
}
pNew->data = val;
pNew->next = NULL;
p->next = pNew;
}
void insert(PNODE pHead, int pos, int val)
{
int i = 0;
PNODE p = pHead;
while (p!=NULL && i<pos-1)
{
p = p->next;
i++;
}
if (p==NULL || i>pos-1)
{
printf("pos not valid");
exit(-1);
}
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("内存分配失败");
exit(-1);
}
pNew->data=val;
pNew->next = p->next;
p->next = pNew;
}
void delete(PNODE pHead, int pos, int * pVal)
{
int i = 0;
PNODE p = pHead;
while (p->next!=NULL && i<pos-1)
{
p = p->next;
i++;
}
if (p->next==NULL || i>pos-1)
{
printf("pos not valid");
exit(-1);
}
PNODE q = p->next;
*pVal = q->data;
p->next = q->next;
free(q);
q = NULL;
}
int main()
{
int val;
PNODE pHead = NULL;
pHead = init();
printf("%d\n", isEmpty(pHead));
append(pHead, 1);
append(pHead, 2);
append(pHead, 3);
append(pHead, 4);
insert(pHead, 5, 22);
show(pHead);
delete(pHead, 4, &val);
show(pHead);
return 0;
}
标签:操作 分配 void lse 编写 std eof data 内存分配
原文地址:https://www.cnblogs.com/sugare/p/13153781.html