数据结构教程第十二课实验二循环链表实验

文章作者 100test 发表时间 2007:03:10 18:29:36
来源 100Test.Com百考试题网


本课主题: 实验二 循环链表实验
教学目的: 掌握单向链表的实现方法
教学重点: 单向链表的存储表示及操作
教学难点: 单向链表的操作实现
授课内容:
一、单向链表的存储表示
C源程序
#include
#include
#include

#define ERROR 0
#define OK 1
#define EQUAL 1
#define OVERFLOW -1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

struct STU{
char name[20].
char stuno[10].
int age.
int score.
}stu[50].
typedef struct STU ElemType.

struct LNODE
{
ElemType data.
struct LNODE *next.
}.

typedef struct LNODE LNode.
typedef struct LNODE *LinkList.


int init(LinkList *L)
{
*L=(LNode *)malloc(sizeof(LNode)).
if(!L) exit(ERROR).
(*L)->next=NULL.
return OK.
}/*init */

int ListLength(LinkList L)
{
int j=0.
while (L->next)
{
L=L->next.
j .
}
return j.
}

int GetElem(LinkList L,int i,ElemType *e)
{
LinkList p. int j.
p=L->next.j=1.
while(p&.&.j p=p->next. j.
}
if(!p||j>1) return ERROR.
*e=p->data.
return OK.
}

int EqualList(ElemType *e1,ElemType *e2)
{
if (strcmp(e1->name,e2->name)==0)
return 1.
else
return 0.
}

int Less_EqualList(ElemType *e1,ElemType *e2)
{
if (strcmp(e1->name,e2->name)<=0)
return 1.
else
return 0.
}
int LocateElem(LinkList La,ElemType e,int type)
{
int i.
LinkList p.
p=La.
switch (type)
{
case EQUAL:
while(p->next)
{
p=p->next.
if(EqualList(&.p->data,&.e))
return 1.
}
return 0.
break.
default:
break.
}
return 0.
}

void MergeList(LinkList La,LinkList Lb,LinkList *Lc)
{
LinkList pa,pb,pc.
pa=La->next.pb=Lb->next.
*Lc=pc=La.
while(pa &.&. pb)
{
if(Less_EqualList(&.pa->data,&.pb->data))
{
pc->next=pa.pc=pa.pa=pa->next.
}
else
{
pc->next=pb.pc=pb.pb=pb->next.
}
}
pc->next=pa?pa:pb.
free(Lb).
}

int printlist(LinkList L)
{
int i.
LinkList p.
p=L.
printf("name stuno age score\n").
while(p->next)
{
p=p->next.
printf("%-10s %s\t%d\t%d\n", p->data.name, p->data.stuno,
p->data.age, p->data.score).
}
printf("\n").
}

int ListInsert(LinkList L,int i,ElemType e)
{
LinkList p,s.
int j.
p=L.j=0.
while(p&.&.j {
p=p->next.
j.
}
if(!p||j>i-1) return ERROR.
s=(LinkList)malloc(sizeof(LNode)).
s->data=e.
s->next=p->next.
p->next=s.
return OK.
}/*ListInsert Before i */


main()
{
struct STU e.
LinkList La,Lb,Lc.

clrscr().

printf("\n\n-------------------List Demo is running...----------------\n\n").
printf("First is InsertList function.\n").
init(&.La).

相关文章


数据结构教程第十四课串的定义
数据结构教程第十二课实验二循环链表实验
数据结构教程第十课栈的表示与实现
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛