码迷,mamicode.com
首页 > 其他好文 > 详细

带头结点的线性链表代码

时间:2017-09-24 19:16:25      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:free   代码   delete   线性   定义   nbsp   while   lis   ini   


//单链表的结点定义
typedef struct Node
{
DataType data;
struct Node *next;
}SLNode;

//初始化ListInitiate(SLNode **head)
void ListInitiate(SLNode **head)
{
*head=(SLNode *)malloc(sizeof(SLNode));
(*head)->next=NULL;
}

//求当前元素个数ListLength(SLNode *head)
int ListLength(SLNode *head)
{
SLNode *p=head;
int size =0;
//循环计数
while(p->next!=NULL)
{
p=p->next;
size++;

}
return size;
}


//插入Insert(SLNode *head,int i,DataType x)
int ListInsert(SLNode *head,int i,DataType x)
{
SLNode *p,*q;
int j;

p=head;
j=-1;
while(p->next!=NULL&&j<i-1)
//最终让指针p指向第i-1个结点
{
p=p->next;
j++;
}

if(j!=i-1)
{
printf("插入元素位置参数错!");
return 0;
}

//生成新结点,并赋值
q=(SLNode *)malloc(sizeof(SLNode));
q->data=x;

//插入步骤
q->next=p->next;
p->next=q;
return 1;
}

 


//删除ListDelete(SLNode *head,int i,DataType *x)
int ListDelete(SLNode *head,int i,DataType *x)
{
SLNode *p,*s;
int j;
p=head;
j=-1;
while(p->next!=NULL&&p->next->next!=NULL&&j<i-1)
//循环结束时指针p指向第i-1个结点
{
p=p->next;
j++;
}

if(j!=i-1)
{
printf("删除元素位置参数错!");
return 0;
}
s=p->next;
*x=s->data;
p->next=p->next->next;//删除
free(s); //释放指针s所指向结点的内存空间
return 1;
}

//取数据元素ListGet(SLNode *head,int i,DataType *x)
int ListGet(SLNode *head,int i,DataType *x)
{
SLNode *p;
int j;
p=head;
j=-1;
while(p->next!=NULL && j<i)
{
p=p->next;
j++;
}
if(j!=i)
{
printf("取元素位置出错!");
return 0;
}
*x=p->data;
return 1;
}

//撤销单链表Destroy(SLNode **head)
void Destroy(SLNode **head)
{
SLNode *p,*p1;
p=*head;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
*head=NULL;
}

 

带头结点的线性链表代码

标签:free   代码   delete   线性   定义   nbsp   while   lis   ini   

原文地址:http://www.cnblogs.com/jiechao26/p/7587974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!