高职教材《数据结构(C语言描述)》(王路群主编) 源代码
绪论
P8
例: 计算f=1!+2!+3!+…+n!,用C语言描述。
void factorsum(n)
int n;
{
int i,j;
int f,w;
f=0;
for (i=1;i〈=n;i++)
{
w=1;
for (j=1;j〈=i;j++)
w=w*j;
f=f+w;
}
return;
}
第二章 线性表
P16【算法2.1 顺序表的插入】
int Insert(Elemtype List[],int *num,int i,Elemtype x)
{/*在顺序表List[]中,*num为表尾元素下标位置,在第i个元素前插入数据元素x,若成功,返回TRUE,否则返回FALSE。*/
int j;
if (i<0||i>*num+1)
{printf(“Error!”); /*插入位置出错*/
return FALSE;}
if (*num>=MAXNUM-1)
{printf(“overflow!”);
return FALSE;} /*表已满*/
for (j=*num;j>=i;j--)
List[j+1]=List[j]; /*数据元素后移*/
List[i]=x; /*插入x*/
(*num)++; /*长度加1*/
return TRUE;}
P18【算法2.2 顺序表的删除】
int Delete(Elemtype List[],int *num,int i)
{/*在线性表List[]中,*num为表尾元素下标位置,删除第i个长度,线性表的长度减1,若成功,则返回TRUE;否则返回FALSE。*/
int j;
if(i<0||i>*num)
{printf(“Error!”); return FALSE; } /*删除位置出错!*/
for(j=i+1;j<=*num;j++)
List[j-1]=List[j]; /*数据元素前移*/
(*num)--; /*长度减1*/
return TRUE; }
P19 例:将有序线性表La={2,4,6,7,9},Lb={1,5,7,8},合并为Lc={1,2,4,5,6,7,7,8,9}。
void merge(Elemtype La[],Elemtype Lb[],Elemtype **Lc)
{ int i,j,k;
int La_length,Lb_length;
i=j=0;k=0;
La_length=Length(La);Lb_length=Length(Lb);/*取表La,Lb的长度*/
Initiate(Lc); /*初始化表Lc*/
While (i<=La_length&&j<=Lb_length)
{ a=get(La,i);b=get(Lb,j);
if(a
else {insert(Lc,++k,b);++j;}
} /*将La和Lb的元素插入到Lc中*/
while (i<=La_length) { a=get(La,i);insert(Lc,++k,a);}
while (j<=lb_length) { b=get(La,j);insert(Lc,++k,b); } }
P21例如:下面定义的结点类型中,数据域包含三个数据项:学号、姓名、成绩。
Struct student
{ char num[8]; /*数据域*/
har name[8]; /*数据域*/
int score; /*数据域*/
struct student *next; /*指针域*/
}
P21单链表结点结构定义为:
Typedef struct slnode
{ Elemtype data;
struct slnode *next;
}slnodetype;
slnodetype *p,*q,*s;
P21 【算法2.3 单链表的初始化】
int Initiate(slnodetype * *h)
{ if((*h=(slnodetype*)malloc(sizeof(slnodetype)))==NULL) return FALSE;
(*h)->next=NULL;
return TRUE; }
P22 【算法2.4 单链表的后插入】
{ s=(s