//vs2005,vc6.0,gcc测试均通过
/*---------- Link.H ---------------*/
typedef int DataType; /*定义节点数据类型*/
typedef struct tagLink
{
DataType data;
struct tagLink* next; //指向该结构体的指针
}*Link; //指向该结构体的指针
typedef struct tagLinkList
{
Link head;
int len;
}*LinkList;
LinkList InitList() //构造一个空的线性表
{
LinkList list;
list=(LinkList)malloc(sizeof(struct tagLinkList));
list->head=NULL;
list->len=0;
return list;
}
int ListInsert(LinkList L,int i,DataType e) //在第I个元素之后插入e,如果是0则插入在首位
{
if(i<0&&i>L->len) return 0;
else
{
Link bx,p;
bx=(Link)malloc(sizeof(struct tagLink));
bx->data=e;
bx->next=NULL;
p=L->head;
if(i==0)
{
bx->next=p;
L->head=bx;
}
else
{
int j=1;
for(j;j<i;j++)
{
p=p->next;
}
bx->next=p->next;
p->next=bx;
}
L->len++;
return 1;
}
}
int ListDelete(LinkList L,int i) //删除第i个元素
{
if(i<1&&i>L->len)
{
printf("删除出错");
return 0;
}
else
{
Link p,q;
DataType t;
p=L->head;
if(i==1)
{
L->head=p->next;
t=p->data;
free(p);
}
else
{
int j=2;
for(j;j<i;j++) p=p->next;
t=p->next->data;
q=p->next;
p->next=p->next->next;
free(q);
}
L->len--;
return t;
}
}
/*---------------- http://ourys.com原创,做人要厚道,转帖请标明来处 ------- Author:Hector -------*/
/*---------------- 基本测试文件 ------- Author:Hector -------*/
#include <stdio.h>
#include <stdlib.h>
#include "List.h"
int main()
{
Link px;
LinkList list=InitList();
int i;
for(i=0;i<10;i++)
{
ListInsert(list,i,(i+1)*(i+1));
}
ListDelete(list,1);
ListDelete(list,4);
px=list->head;
for(i=0;i<list->len;i++)
{
printf("%d/n",px->data);
px=px->next;
}
printf("%d/n",list->len);
return 0;
}