//单链表的结点定义
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;
}