严蔚敏版数据结构所有算法代码.doc

PAGE \* MERGEFORMAT PAGE \* MERGEFORMAT1 严蔚敏版数据结构所有算法代码 线性数据结构 2013年9月 //线性表、链表 //栈、队列 //数组、广义表 //串 线性表 typedef struct { char name[20];//注意如果应用指针的形式 //在初始化每个结点时一定要先为结点中的每个变量开辟内存空间 char sex; char addr[100]; unsigned int age; char phonenum[20]; }node;//结点描述 typedef struct { node *p; int length;//当前顺序表长度 int listsize;//当前分配的线性表长度 }list;//线性表描述 list L;//定义一个线性表 int initlist(list l)//构造一个空的线性表 { l.p=(node*)malloc(LIST_INIT_SIZE*sizeof(node)); if(!(l.p)) exit(1); l.length=0; l.listsize=LIST_INIT_SIZE; return true; } void destroylist(list l)//销毁线性表操作 { if(l.p!=NULL) { free(l.p); printf(销毁成功!\n); } else printf(线性表不存在!\n); } int clearlist(list l)//将线性表置空操作 { if(l.p==NULL) { printf(线性表不存在!\n); return false; } else { free(l.p); l.p=(node*)malloc(l.listsize*sizeof(node)); l.length=0; } return true; } int listempty(list l)//判断线性表是否为空表 { if(l.p==NULL) return true; else return false; } int getelem(list l,int i,node e)//用e返回表中第i个数据元素 { if(l.p==NULL) return false; else e=l.p[i-1]; return true; } int priorelem(list l,int i,node pre_e)//得到第i个元素的前驱元素 { if(i==0||l.p==NULL) return false; else pre_e=l.p[i-1]; return true; } int nextelem(list l,int i,node next_e)//得到表中第i个元素的后继元素 { if(i=l.length||l.p==NULL) return false; else next_e=l.p[i+1]; return true; } int insertlist(list l,int i,node e)//将元素e插入到表l中第i个元素的后面 { node *q,*k; if(i1||il.length+1) return false; if(l.length=l.listsize) { l.p=(node *)realloc(l.p,(l.listsize+LISTINCREMENT)*sizeof(node)); if(!l.p) exit(1); l.listsize+=LISTINCREMENT; } k=l.p[i-1]; for(q=l.p[l.length-1];qk;q--) *(q+1)=*q; *k=e; l.length++; return true; } int deletelist(list l,int i,node e)//删除表中第i个元素并用e返回其值 { node *q; int j=i-1; if(i1||il.length) return false; e=l.p[i-1]; for(q=l.p[i-1];jl.length-1;j++) *q=*(++q); l.length--; return true; } void mergerlist(list la,list lb,li

文档评论(0)

1亿VIP精品文档

相关文档