数据结构——不带头节点的单链表的基本操作
结构体的创建:
typedef struct SListNode
{
ElemType data;
struct SListNode *next;
}SListNode;
typedef SListNode* SList;
单链表的基本操作:
初始化:
void SListInit(SList *phead)//初始化
{
assert(phead != NULL); //因为phead是外部实参的地址,所以地址是一定存在的,不可能为空
//如果为NULL的话一定是出错误了,所以用assert断言来提示
*phead = NULL; //在变量声明的时候,如果没有确切的地址可以赋值,
//为指针变量赋一个 NULL 值是一个良好的编程习惯。
//赋为 NULL 值的指针被称为空指针
}
void SListPushBack(SList *phead, ElemType x)//尾插法
{
assert(phead);
SList s = (SList)malloc(sizeof(SListNode));
assert(s!= NULL);
s->data = x;
s->next = NULL;
SList p = *phead;
//连接
if (p == NULL)
{
*phead = s;
}
else
{
while (p->next != NULL)
{
p = p->next;
}
p->next = s;
}
}
void SListPushFront(SList *phead, ElemType x) //头插