void LinkList_Reverse(LinkList* list);
////////////////////////////////////////////////////////////////////////////////////////////////////
#include "Linklist.h"
#include
typedef struct _tag_linklist
{
LinkListNode header;
int length;
}TLinkList;
/**********************************
*函数功能:创建链表
*参数说明:
* 输入:无
* 输出:链表
*日期: 2018-04-14-15.45
***********************************/
LinkList* LinkList_create() //o(1)
{
TLinkList* list=(TLinkList*)malloc(sizeof(TLinkList));
if(list!=NULL)
{
list->length=0;
list->header.next=NULL;
}
return list;
}
void LinkList_destroy(LinkList* list) //o(1)
{
free(list);
}
void LinkList_clear(LinkList* list) //o(1)
{
if(list!=NULL)
{
TLinkList* slist=(TLinkList*)list;
slist->length=0;
slist->header.next=NULL;
}
}
int LinkList_length(LinkList* list) //o(1)
{
if(list!=NULL)
{
TLinkList* slist=(TLinkList*)list;
return slist->length;
}else{
return -1;
}
}
/**********************************
*函数功能: 链表中插入元素
*参数说明:
* 输入:list:链表;node:结点信息;pos:位置
* 输出:插入成功为1,失败为0
*日期: 2018-04-14-15.45
***********************************/
int LinkList_insert(LinkList* list,LinkListNode* node,int pos) //o(n)
{
if(list!=NULL && pos>=0 && node!=NULL)
{
TLinkList* slist=(TLinkList*)list;
LinkListNode* current=(LinkListNode*)slist;
int i=0;
for(i=0;(i
{
current=current->next;
}
node->next=current->next;
current->next=node;
slist->length++;
return 1;
}else{
return 0;
}
}
/**********************************
*函数功能:链表删除
*参数说明:
* 输入:list:链表:pos:位置
* 输出:删除结点
*日期: 2018-04-14-15.45
***********************************/
LinkListNode* LinkList_delete(LinkList* list,int pos) //o(n)
{
LinkListNode* ret=NULL;
if(list!=NULL && pos>=0)
{
TLinkList* slist=(TLinkList*)list;
LinkListNode* current=(LinkListNode*)slist;
int i=0;
for(i=0;(i
{
current=current->next;
}
ret=current->next;
current->next=ret->next;
slist->length--;
}
return ret;
}
/**********************************
*函数功能:获取链表中位置元素
*参数说明:
* 输入:list:链表;pos:位置;
* 输出:链表中位置元素
*日期: 2018-04-14-15.45
***********************************/
LinkListNode* LinkList_get(LinkList* list,int pos) //o(n)
{
LinkListNode* ret=NULL;
if(list!=NULL && pos>=0)
{
TLinkList* slist=(TLinkList*)list;
LinkListNode* current=(LinkListNode*)slist;
int i=0;
for(i=0;(i
{
current=current->next;
}
ret=current->next;
}
return ret;
}
/**********************************
*函数功能:链表反转
*参数说明:
* 输入:list:待反转链表
* 输出:
*日期: 2018-04-14-16.45
***********************************/
void LinkList_Reverse(LinkList* list)
{
if(list!=NULL)
{
TLinkList* slist=(TLinkList*)list;
LinkListNode* temp=(LinkListNode*)slist;
LinkListNode* p=NULL;
temp=slist->header.next;
while(temp->next !=NULL)
{
p=temp->next;
temp->next=p->next;
p->next=slist->header.next;
slist->header.next=p;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
#include "Seqlist.h"
#include "Linklist.h"
int main()
{
LinkList* list=LinkList_create();
Value VV[]={0};
Value v1;
Value v2;
Value v3;
Value v4;
Value v5;
int i=0;
v1.v=1.1;
v2.v=2.2;
v3.v=3.3;
v4.v=4.4;
v5.v=5.5;
LinkList_insert(list,&v1,LinkList_length(list));
LinkList_insert(list,&v2,0);
LinkList_insert(list,&v3,0);
LinkList_insert(list,&v4,LinkList_length(list));
LinkList_insert(list,&v5,0);
for(i=0;i
Value* temp=(Value*)LinkList_get(list,i);
printf("%f\t",temp->v);
}
printf("\n-------------------\n");
LinkList_Reverse(list);
for(i=0;i
Value* temp=(Value*)LinkList_get(list,i);
printf("%f\t",temp->v);
}
printf("\n-------------------\n");
while(LinkList_length(list)>0)
{
Value* temp=(Value*)LinkList_delete(list,0);
printf("%f\t",temp->v);
}
printf("\n-------------------\n");
printf("ok\n");
return 0;
}