从基础开始——线性表的操作
已有 15321 次阅读2009-2-27 20:40
|个人分类:基础知识
早上去听了一下数据结构课,回来就把线性表的操作写了一下,在初始化的时候又在细节上犯错了。把程序放在这里,算是给自己一个提醒。
线性表的初始化:给结构体赋值,然后将首地址传给指向线性表的指针。指针在没有动态申请(malloc)分配空间之前是没有存储空间的。
#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
int i,j,k;
typedef struct{
int elem[MAXSIZE];
int last;
}SeqList ;
void Mergelist(SeqList *La,SeqList *Lb,SeqList *Lc)
{
while((i<La->last)&&(j<Lb->last)){
if(La->elem[i]<=Lb->elem[j]){
Lc->elem[k]=La->elem[i];
i++;
k++;
}else{
Lc->elem[k]=Lb->elem[j];
j++;
k++;
}
}
while(i<La->last){
Lc->elem[k]=La->elem[i];
i++;k++;
}
while(j<Lb->last){
Lc->elem[k]=Lb->elem[j];
j++;k++;
}
Lc->last=La->last+Lb->last;
}
int Inslist(SeqList *La,int i,int e)
{
if((i<1)||(i>La->last+2)) { //check the legality of the locate
printf("Wrong locate to insert\n");
return(ERROR);
}
if(La->last>=MAXSIZE-1){
printf("Tabal is full\n");
return(ERROR);
}
for(k=La->last;k>=i-1;k--)
La->elem[k+1]=La->elem[k];
La->elem[i-1]=e;
La->last++;
return(OK);
}
int DelList(SeqList *Lb,int i,int *e)
{
if((i<1)||(i>Lb->last+1)){
printf("Wrong locate to delate\n");
return(ERROR);
}
*e = Lb->elem[i-1];
for(k=i;k<Lb->last;k++)
Lb->elem[k-1]=Lb->elem[k];
Lb->last --;
return(OK);
}
int main()
{
i=0;j=0;k=0;
SeqList La = {{3,5,8,11},4};
SeqList Lb = {{2,6,8,9,11,15,20},7};
SeqList Lc = {{ },20};
Mergelist(&La,&Lb,&Lc);
for(i=0;i<Lc.last;i++)
printf("Lc=%d\n",Lc.elem[i]);
Inslist(&La,3,6);
for(i=0;i<La.last;i++)
printf("La=%d\n",La.elem[i]);
DelList(&Lb,4,&Lb.elem[3]);
for(i=0;i<Lb.last;i++)
printf("Lb=%d\n",Lb.elem[i]);
}