/******线性表链式存储******/
/*来源:《大话数据结构》*/
#define OK 1
#define ERROR 1
typedef int Status;
typedef int ElemType;
/*线性表的单链表存储结构*/
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
/*读取元素*/
/*操作结果:用e返回L中第i个元素的值*/
Status GetElem(LinkList L,int i,ElemType *e)
{
int j;
LinkList P;
p=L->next;
j=1;
while(p && j<i)
{
p=p->next;
++j;
}
if(!p || j>i)
return ERROR;
*e=p->data;
return OK;
}
/*插入结点*/
/*操作结果:在L的第i个位置插入结点e,长度增加1*/
Status ListInsert(LinkList *L,int i,ElemType e)
{
int j;
LinkList p,s;
p=*L;
j=1;
while(p && j<i)
{
p=p->next;
++j
}
if(!p || j>i)
return ERROR;
s=(LinkList)malloc(sizeof(Node));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
/*删除结点*/
/*操作结果:删除L的第i个元素,并用e返回其值,长度减去1*/
Status ListDelete(LinkList *L,int i,ELemType *e)
{
int j;
LinkList p,q;
p=*L;
j=1;
while(p->next && j<i)
{
p=p->next;
++j;
}
if( (!p->next) || j>i)
return ERROR;
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
return OK;
}
/*创建链表*/
/*随机产生n个元素的值,创建一个带头接的的链表L(头插法)*/
void CreatListHead(LinkList *L,int n)
{
LinkList p;
int i;
srand(time(0));
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
p->data=rand()%100=1;
p->next=(*L)->next;
(*L)->next=p;
}
}
/*创建链表*/
/*随机产生n个元素的值,创建一个带头接的的链表L(尾插法)*/
void CreatListTail(LinkList *L,int n)
{
LinkList p,r;
int i;
srand(time(0));
*L=(LinkList)malloc(sizeof(Node));
r=*L;
for(i=0;i<n;i++)
{
p=(Node *)malloc(sizeof(Node));
p->data=rand()%100+1;
r->next=p;
r=p;
}
r->next=NULL;
}
/*删除整个链表*/
Status ClearList(LinkList *L)
{
LinkList p,q;
p=(*L)->next;
while(p)
{
q=p->next;
free(p);
p=q;
}
(*L)->next=NULL;
return OK;
}
线性表的链式存储
最新推荐文章于 2024-10-08 20:26:15 发布