当前位置: 首页 > >

线性链表顺序存储结构(C语言实现)

发布时间:


/*
需要有的内容:
#include<stdio.h>
#include<ds.h>
#include<malloc.h>
typedef int ElemType;
*/

/*sqlist.txt*/
typedef struct list{
int Length;
int ListSize;
ElemType *elem;
}sqlist;
int InitList( sqlist *l){/*对sqlist *l进行初始化*/
l->Length=0;
l->ListSize=4;
l->elem=(ElemType *)malloc(4*sizeof(ElemType));
if(!l->elem) return error;
else return OK;
}
int DestroyList(sqlist *l){/*毁坏sqlist *l的结构*/
free(l);
}
int ClearList(sqlist *l){
if(l->Length){
free(l->elem);
l->Length=0;
l->elem=(ElemType*)malloc((l->ListSize)*sizeof(ElemType));
}
return OK;
}
int ListEmpty(sqlist l){/*判断sqlist *l是否为空*/
if(l.Length==0) return Ture;
else return Flase;
}
int ListLength(sqlist l){/*求出sqlist l的长度*/
int temp=0;
temp=l.Length;
return temp;
}
int GetElem(sqlist l,int i,ElemType *e){/*如果sqlist *l不是空,取出sqlist *l的第一个元素,并将其传给e*/
if(i<1||i>l.ListSize) return error;
else *e=l.elem[i-1];
}
int LocateElem(sqlist l,ElemType e,int compare(ElemType ,ElemType )){
if(compare(l.elem[0],e)==1) return OK;
else return Flase;
}
ElemType PriorElem(sqlist l,ElemType cur_e,ElemType *pre_e){/* 判断sqlist *l中是否有元素 cur_e, 并将其前驱传给pre_e */
int i,k=0;
ElemType *p;
p=NULL;
if(!l.Length||l.elem[0]==cur_e) return Flase;
pre_e=(ElemType*)malloc((l.Length)*sizeof(ElemType));
for(i=1;i<l.Length;i++){
if(l.elem[i]==cur_e) {
k++;
pre_e[k-1]=l.elem[i-1];
}
}
if(!k) { free(pre_e);
return Flase;
}
else p=pre_e;
return *p;
}
ElemType NextElem(sqlist l,ElemType cur_e,ElemType *Next_e){/* 判断sqlist *l中是否有元素 cur_e, 并将其后继传给Next_e */
int i,j=0;
ElemType *p;
if(!l.Length||l.elem[l.Length-1]==cur_e) return error;
Next_e=(ElemType*)malloc((l.Length)*sizeof(ElemType));
for(i=0;i<l.Length-1;i++) {
if(l.elem[i]==cur_e) {
j++;
Next_e[j-1]=l.elem[i+1];
}
}
if(!j){free(Next_e);
return Flase;
}
else p=Next_e ;
return *p;
}
int InsertList(sqlist *l,int i,ElemType e){/*将sqlist *l的第i个位置插入e*/
int j;
if(i>l->Length+1||i<1||!l->Length) return error;
if(l->Length==l->ListSize){
l->elem=(ElemType*)realloc(l->elem,(l->ListSize)+1);
l->ListSize+=1;
}
for(j=l->Length;j>=i;j--)
l->elem[j]=l->elem[j-1];
l->elem[i-1]=e;
l->Length+=1;
return OK;
}
int ListDelete(sqlist *l,int i){/*将sqlist *l的第 i位置的元素删除*/
int j;
if(ListEmpty) return Flase;
else if(i<1||i>l->Length) return error;
else
for(j=i;j<l->Length;j++)
l->elem[j-1]=l->elem[j];
l->Length-=1;
return OK;
}

/* 需要 sqlist.h文件,即下面的代码*/

typedef struct list{
int Length;
int ListSize;
ElemType *elem;
}sqlist;
int InitList( sqlist *l){/*对sqlist *l进行初始化*/
l->Length=0;
l->ListSize=4;
l->elem=(ElemType *)malloc(4*sizeof(ElemType));
if(!l->elem) return error;
else return OK;
}
int DestroyList(sqlist *l){/*毁坏sqlist *l的结构*/
free(l);
}
int ClearList(sqlist *l){
if(l->Length){
free(l->elem);
l->Length=0;
l->elem=(ElemType*)malloc((l->ListSize)*sizeof(ElemType));
}
return OK;
}
int ListEmpty(sqlist l){/*判断sqlist *l是否为空*/
if(l.Length==0) return Ture;
else return Flase;
}
int ListLength(sqlist l){/*求出sqlist l的长度*/
int temp=0;
temp=l.Length;
return temp;
}
int GetElem(sqlist l,int i,ElemType *e){/*如果sqlist *l不是空,取出sqlist *l的第一个元素,并将其传给e*/
if(i<1||i>l.ListSize) return error;
else *e=l.elem[i-1];
}
int LocateElem(sqlist l,ElemType e,int compare(ElemType ,ElemType )){
if(compare(l.elem[0],e)==1) return OK;
else return Flase;
}
ElemType PriorElem(sqlist l,ElemType cur_e,ElemType *pre_e){/* 判断sqlist *l中是否有元素 cur_e, 并将其前驱传给pre_e */
int i,k=0;
ElemType *p;
p=NULL;
if(!l.Length||l.elem[0]==cur_e) return Flase;
pre_e=(ElemType*)malloc((l.Length)*sizeof(ElemType));
for(i=1;i<l.Length;i++){
if(l.elem[i]==cur_e) {
k++;
pre_e[k-1]=l.elem[i-1];
}
}
if(!k) { free(pre_e);
return Flase;
}
else p=pre_e;
return *p;
}
ElemType NextElem(sqlist l,ElemType cur_e,ElemType *Next_e){/* 判断sqlist *l中是否有元素 cur_e, 并将其后继传给Next_e */
int i,j=0;
ElemType *p;
if(!l.Length||l.elem[l.Length-1]==cur_e) return error;
Next_e=(ElemType*)malloc((l.Length)*sizeof(ElemType));
for(i=0;i<l.Length-1;i++) {
if(l.elem[i]==cur_e) {
j++;
Next_e[j-1]=l.elem[i+1];
}
}
if(!j){free(Next_e);
return Flase;
}
else p=Next_e ;
return *p;
}
int InsertList(sqlist *l,int i,ElemType e){/*将sqlist *l的第i个位置插入e*/
int j;
if(i>l->Length+1||i<1||!l->Length) return error;
if(l->Length==l->ListSize){
l->elem=(ElemType*)realloc(l->elem,(l->ListSize)+1);
l->ListSize+=1;
}
for(j=l->Length;j>=i;j--)
l->elem[j]=l->elem[j-1];
l->elem[i-1]=e;
l->Length+=1;
return OK;
}
int ListDelete(sqlist *l,int i){/*将sqlist *l的第 i位置的元素删除*/
int j;
if(ListEmpty) return Flase;
else if(i<1||i>l->Length) return error;
else
for(j=i;j<l->Length;j++)
l->elem[j-1]=l->elem[j];
l->Length-=1;
return OK;
}




友情链接: 时尚网 总结汇报 幼儿教育 小学教育 初中学习资料网