</pre><pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
//链表的定义
typedef void List;
typedef void ListNode;
//链式链表的相关定义
typedef struct _tag_linklist SqList;
typedef struct _tag_linkNode SqListNode;
typedef int Sqdata;
//创建一个空链表,并返回
List * List_Create();
//将链表清空
void List_Clear(List * list);
//销毁链表
void List_Destroy(List *list);
//删除节点的数据为data的数据并返回删除的数据
Sqdata List_Delete(List *list,Sqdata data);
//往链表内插入节点
int List_Insert(List * list,ListNode * node);
//得到链表中节点数据为data的节点指针
ListNode * List_Get(List * list,Sqdata data);
//返回链表的长度
int List_Length(List *list);
//定义链式链表的结构
struct _tag_linklist{
SqListNode * HNode;
SqListNode * ENode;
};
struct _tag_linkNode{
Sqdata data;
SqListNode * nNode;
};
//线性顺序存储链表具体操作的相关实现
List * List_Create()
{
SqList * ret = (SqList *)malloc(sizeof(SqList));
if(ret != NULL){
ret->HNode=ret->ENode = NULL;
}
return ret;
}
void List_Clear(List * list)
{
SqList * tlist = (SqList *)list;
if(tlist != NULL){
tlist->HNode=tlist->ENode = NULL;
}
}
void List_Destroy(List *list)
{
free(list);
}
int List_Insert(List * list,ListNode * node)
{
SqList * tlist = (SqList *)list;
if(tlist !=NULL){
if(tlist->HNode == NULL){
tlist->HNode = tlist->ENode = (SqListNode *) node ;
}else{
tlist->ENode->nNode = (SqListNode *) node ;
tlist->ENode = (SqListNode *) node ;
}
return 1;
}
return 0;
}
Sqdata List_Delete(List *list,Sqdata data)
{
SqList * tlist = (SqList *)list;
SqListNode * dnode = (SqListNode *)List_Get(list,data);
SqListNode rnode = *dnode;
SqListNode * tnode = tlist->HNode;
int i;
if(tlist !=NULL && tnode != NULL && dnode != NULL){
while(tnode->nNode != dnode){
tnode = tnode->nNode;
}
tnode->nNode = tnode->nNode->nNode;
free(tnode->nNode);
}else{
printf("ERROR:不存在该节点或链表不存在\n");
}
return rnode.data;
}
ListNode * List_Get(List * list,Sqdata data)
{
SqList * tlist = (SqList *)list;
SqListNode * tnode = tlist->HNode;
if(tlist != NULL && tnode !=NULL)
{
while(tnode != tlist->ENode->nNode){
if(tnode->data==data){
return tnode;
}
tnode = tnode->nNode;
}
}
return NULL;
}
int List_Length(List *list)
{
int count=-1;
SqList * tlist = (SqList *)list;
SqListNode * tnode = tlist->HNode;
if(tlist !=NULL) {
count++;
while(tnode != tlist->ENode->nNode){
count++;
tnode = tnode->nNode;
}
}
return count;
}
//添加输出函数用于具体测试
void List_Print(List *list)
{
int count =0;
SqList * tlist = (SqList *)list;
SqListNode * tnode = tlist->HNode;
if(tlist != NULL){
while(tnode != tlist->ENode->nNode){
printf("第%d个元素:%d\n",count,tnode->data);
count++;
tnode = tnode->nNode;
}
}
}
int main()
{
SqListNode a[5];
int i;
List * list = List_Create();
for(i=0;i<5;i++){
a[i].data = i+1;
a[i].nNode = NULL;
}
for(i=0;i<5;i++){
List_Insert(list,&a[i]);
}
List_Print(list);
printf("链表的长度:%d\n",List_Length(list));
printf("被删除的数据是:%d\n",List_Delete(list,3));
List_Print(list);
printf("链表的长度:%d\n",List_Length(list));
printf("%d\n",((SqListNode *)List_Get(list,2))->data);
return 0;
}