单链表的增删操作

单链表是一种链式的存储结构,由若干个结点构成,每个结点包含数据域和指针域两个部分,下面对单链表实现头插,尾插,头删,尾删操作。

....SList.h
#pragam once

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <malloc.h>

typedef int SLDataType;

typedef struct SListNode
{
 SLDataType _data;
 struct SListNode* _next;
}SListNode;

typedef struct SList
{
  SListNode *_head;
}SList;

void SListInit (SList *plist,SLDataType x);

SListNode *Buynode (x);
void SListpushback (Slist *plist,SLDataType x);
void SListpushfront (SList *plist,SLDataType x);
void SListpopfront (SList *plist)void SListpopback (SList *plist);
void SListPrint (SList *plist);
void SListDestory (SList *plist);



....list.c
#include "SList.h"
SList plist;

void SListInit (SList *plist,SLDataType x)//单链表的初始化
{
  assert (plist);
  plist->_head =NULL;
}

void SListPrint (SList *plist)//单链表的打印
{
  assert (plist);
  SListNode *cur = plist->_head;
  while (cur != NULL)
  {
   printf ("%d->",cur->_data);
   cur=cur->_next;
  }
  printf ("NULL\n");
}

void SListDestory (SList *plist)//单链表的销毁
{
 assert (plist);
 SListNode *cur = plist->_head;
 SListNOde *dst=NULL;
 while (cur!=NULL)
 {
  dst=cur->_next;
  free(cur);
  cur=dst;
 }
 plist->_head=NULL;
}

SListNode *Buynode (x)//设置一个产生新结点的函数
{
 SListnode *pnode = (SListNode *)malloc (sizeof (SListNode));//该结点为指针类型
 pnode->_data=x;
 pnode->_next=NULL;
 return pnode;
 }

void SListpushback (Slist *plist,SLDataType x)//单链表的尾插
{//分为有结点和无结点两种情况
 assert (plist);
 SListNode *newnode = Buynode (x);
 //无结点
 SListNode *tail =plist->_head;
 if (tail==NULL)
 {
   plist->_head=newnode;
 }
else//有结点
 {
  while (tail->_next!=NULL)
  {
   tail=tail->_next;
  }
  tail->_next=newnode;
  newnode->_next = NULL;
 }
}

void SListpushfront (SList *plist,SLDataType x)//单链表的头插
{
 assert (plist);
 SListNode *newnode =Buynode (x);
 SListNode *cur =plist->_head;
 newnode->_next=cur;
 plist->_head=newnode;
}
 
void SListpopfront (SList *plist)//单链表的头删
{
 assert (plist);
 SListNode *cur = plist->_head;
 SlistNode *dst=NULL;
 dst=cur->_next;
 free (cur);
 cur=dst;
 plist->_head=cur;
 }

void SListpopback (SList *plist)//单链表的尾删
{
 assert (plist);
 SListNode *tail =plist->_head;
 if (tail->_next==NULL)
 {
  free (tail);
  plist->_head = NULL;
 }
 while (tail->_next->_next!=NULL)
 {
  tail=tail->_next;
 }
 free (tail->_next);
 tail->_next=NULL;
}

void test ( )
{
 void SListInit (plist,8);
 
 void SListpushback (plist,1);
 void SListpushback (plist,2);
 void SListpushback (plist,3);
 void SListpushback (plist,4);
 void SListpushback (plist,5);
 void SListpushfront (plist,6);
 void SListpopfront (plist)void SListpopback (plist);
 
 void SListPrint (plist);
 void SListDestory (plist);
 
 
....test.c
#include "SList.h"
int main ( )
{
 test ( );
 systrm ("pause");
 return 0;
}

上述运行结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值