数据结构的一道题不会 50
求大神解答用单向循环链表实现,下面这些是书上给的一些函数,本人抄完这些函数到主函数就懵b了=。=#include<stdio.h>typedefintListItem;t...
求大神解答
用单向循环链表实现,下面这些是书上给的一些函数,本人抄完这些函数到主函数就懵b了=。=
#include <stdio.h>
typedef int ListItem;
typedef struct node *link;
typedef struct node {ListItem element;link next;int num;} Node;
typedef struct clist *List;
typedef struct clist{
int n;
link last;
}Clist;
link NewNode()
{
link p;
if((p=malloc(sizeof(Node)))==0)
printf("Exhausted memory.");
else return p;
}
List ListInit()
{
link y;
List L=malloc(sizeof*L);
y=NewNode();
y->next=y;
L->last=y;
L->n=0;
return L;
}
ListItem ListRetrieve(int k,List L)
{
int i=1;
link p;
if(k<1||k>L->n)
printf("out of bounds");
p=L->last->next->next;
while(i<k){p=p->next;i++;}
return p->element;
}
int ListLocate(ListItem x,List L)
{
int i=1;
link p;
p=L->last->next->next;
L->last->next->element=x;
while(p->element!=x){p=p->next;i++;}
return ((p==L->last->next)?0:1);
}
void ListInsert(int k,ListItem x,List L)
{
link p,y;
int i;
if(k<0||k>L->n)
printf("out of bounds");
p=L->last->next;
for(i=1;i<k;i++)
p=p->next;
y=NewNode();
y->element=x;
y->next=p->next;
p->next=y;
if(k==L->n)L->last=y;
L->n++;
}
ListItem ListDelete(int k,List L)
{
link p,q;
ListItem x;
int i;
if(k<1||k>L->n)
printf("out of bounds");
q=L->last->next;
for(i=0;i<k-1;i++)
q=q->next;
p=q->next;
q->next=p->next;
if(k==L->n)L->last=q;
x=p->element;
free(p);
L->n--;
return x;
} 展开
用单向循环链表实现,下面这些是书上给的一些函数,本人抄完这些函数到主函数就懵b了=。=
#include <stdio.h>
typedef int ListItem;
typedef struct node *link;
typedef struct node {ListItem element;link next;int num;} Node;
typedef struct clist *List;
typedef struct clist{
int n;
link last;
}Clist;
link NewNode()
{
link p;
if((p=malloc(sizeof(Node)))==0)
printf("Exhausted memory.");
else return p;
}
List ListInit()
{
link y;
List L=malloc(sizeof*L);
y=NewNode();
y->next=y;
L->last=y;
L->n=0;
return L;
}
ListItem ListRetrieve(int k,List L)
{
int i=1;
link p;
if(k<1||k>L->n)
printf("out of bounds");
p=L->last->next->next;
while(i<k){p=p->next;i++;}
return p->element;
}
int ListLocate(ListItem x,List L)
{
int i=1;
link p;
p=L->last->next->next;
L->last->next->element=x;
while(p->element!=x){p=p->next;i++;}
return ((p==L->last->next)?0:1);
}
void ListInsert(int k,ListItem x,List L)
{
link p,y;
int i;
if(k<0||k>L->n)
printf("out of bounds");
p=L->last->next;
for(i=1;i<k;i++)
p=p->next;
y=NewNode();
y->element=x;
y->next=p->next;
p->next=y;
if(k==L->n)L->last=y;
L->n++;
}
ListItem ListDelete(int k,List L)
{
link p,q;
ListItem x;
int i;
if(k<1||k>L->n)
printf("out of bounds");
q=L->last->next;
for(i=0;i<k-1;i++)
q=q->next;
p=q->next;
q->next=p->next;
if(k==L->n)L->last=q;
x=p->element;
free(p);
L->n--;
return x;
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询