数据结构顺序表代码(数据结构顺序表代码怎么写)

http://www.itjxue.com  2023-03-31 04:10  来源:未知  点击次数: 

数据结构顺序表的c语言代码实现,主函数测试时插入和删除操作不能得到预期结果

你的代码中的插入和删除操作根本就无法实现,应为函数无法修改main()函数中传入的实参变量的,把形参改成指针才行

代码改成如下:

#include?stdio.h

#define?Maxsize?50

#define?FALSE?0

#define?TRUE?1

typedef?int?ElemType;

typedef?int?Status;

typedef?struct{

ElemType?data[Maxsize];

int?length;

}SqList;

Status?LocateElem(SqList?L,int?e){//按值查找

int?i;

if(L.length==0)

return?FALSE;

for(i=0;iL.length;i++){

if(L.data[i]==e)

return?i+1;

}

return?FALSE;

}

Status?Insert(SqList?*L,int?i,int?e){//插入操作?//修改成指针

int?j;

if(L-length==Maxsize)?//把?.改成?-

return?FALSE;

if(i1||iL-length+1)

return?FALSE;

for(j=L-length-1;j=i-1;j--)?//把?.改成?-

L-data[j+1]=L-data[j];//把?.改成?-

L-data[i-1]=e;//把?.改成?-

L-length++;//把?.改成?-

return?TRUE?;

}

Status?Delete(SqList?*?L,int?i){//删除操作?//修改成指针

int?j;

if(L-length==0)//把?.改成?-

return?FALSE;

for(j=i;jL-length;j++){//把?.改成?-

L-data[j-1]=L-data[j];//把?.改成?-

}

L-length--;//把?.改成?-

return?TRUE;

}

SqList?CreateList(SqList?L){

int?i;

L.length=30;

for(i=0;iL.length;i++){

L.data[i]=i+1;

}

return?L;

}

void?printSqList(SqList?L){

int?i;

for(i=0;iL.length;i++){

printf("顺序表第%d个元素值为%d\n",i+1,L.data[i]);

}

printf("\n\n");

}

void?main(){

int?k;

int?e;????????//待查元素

int?insertData;//待插元素

int?insert_location,delete_location;//插入位置及删除位置

int?isInserted,isDeleted;//判断是否插入或删除成功

SqList?L=CreateList(L);

printSqList(L);

printf("请输入您要查找的值:");

scanf("%d",e);

k=LocateElem(L,e);

printf("您要查找的值在顺序表第%d个\n",k);

printf("\n\n");

printf("请输入您要插入的位置:");

scanf("%d",insert_location);

printf("\n");

printf("请输入您要插入的值:");

scanf("%d",insertData);

isInserted=Insert(L,insert_location,insertData);

if(isInserted){

printf("%d",L.data[insert_location-1]);

}

printf("\n\n");

printf("请输入您要删除的位置:");

scanf("%d",delete_location);

printf("\n");

isDeleted=Delete(L,delete_location);

if(isDeleted){

printf("\n");

printSqList(L);

}

}

如果是C++可以把函数变成引用,那更简单

数据结构 用C语言实现顺序表的建立及遍历

#include?stdio.h

#include?malloc.h

typedef?struct?nlist

{

????int?*np;

????int?len;//已使用地址个数

????int?maxlen;//最大地址个数

}NLT;

NLT?*createlist();//创建顺序表

int?addtolist(NLT?*nlist);//向顺序表插入元素

void?pList(NLT?*nlist);//遍历顺序表

int?main()

{

????int?i;

????NLT?*nlist=createlist();

????if(nlist)

????{

????????for(i=0;inlist-maxlen;i++)

????????????addtolist(nlist);

????????pList(nlist);

????}

????return?0;

}

void?pList(NLT?*nlist)//遍历打印,空格分割,最后一个数后面没有空格

{

????int?i;

????for(i=0;inlist-len-1;i++)

????????printf("%d?",nlist-np[i]);

????printf("%d",nlist-np[nlist-len-1]);

}

NLT?*createlist()

{

????NLT?*nlist=NULL;

????nlist=(NLT?*)malloc(sizeof(NLT));

????scanf("%d",nlist-maxlen);

????nlist-np=(int?*)malloc(sizeof(int)*nlist-maxlen);

????if(!nlist?||?!nlist-np)

????{

????????printf("内存申请失败!\n");

????????return?NULL;

????}

????nlist-len=0;

????return?nlist;

}

int?addtolist(NLT?*nlist)

{

????if(nlist-lennlist-maxlen)//如果存储空间未满,保存元素,保存成功返回1?失败返回0

????{

????????scanf("%d",nlist-np[nlist-len]);

????????nlist-len++;

????????return?1;

????}

????else?//这里可以写当存储满的之后,空间扩容,本题用不到所以我不写了

????????return?0;

}

求数据结构顺序表完整代码

#includestdio.h#includestdlib.h#define OK 1#define ERROR 0#define OVERFLOW -2#define LIST_INIT_SIZE 100 /*线性表存储空间的初始分配量*/#define LISTINCREMENT 10 /*线性表存储空间的分配增量*/typedef int ElemType ;typedef int Status;typedef struct { ElemType * elem; /*存储空间基址*/ int length; /*当前长度*/ int listsize; /*当前分配的存储容量(以sizeof(ElemType)为单位)*/}SqList; Status InitList_Sq(SqList *LA){ /*构造一个空的线性表L。*/ (*LA).elem=(ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if(!(*LA).elem) exit (OVERFLOW); (*LA).length=0; (*LA).listsize=LIST_INIT_SIZE; return OK;} Status ListInsert_Sq(SqList *LA, int i, ElemType e){/*在顺序线性表L中第i个位置之前插入新的元素e, //i的合法值为1≤i≤Listlength_Sq(L)+1*/ ElemType *newbase, *q, *p;int n=0; /*定义局部变量*/ if(i1||i (*LA).length+1) return ERROR; /*值不合法*/ if((*LA).length=(*LA).listsize){ /*当前空间已满,增加分配*/ newbase=(ElemType*)realloc((*LA).elem, ((*LA).listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit (OVERFLOW); /*存储分配失败*/ (*LA).elem=newbase; /*新基址*/ (*LA).listsize+=LISTINCREMENT;} /*增加存储容量*/ q=((*LA).elem[i-1]); /*q为插入位置*/ for(p=((*LA).elem[(*LA).length-1]);p=q;--p){*(p+1)=*p;++n;} /*插入位置及之后的元素右移*/ printf("n=%d\n",n); *q=e; /*插入e*/ ++(*LA).length; return OK;} Status ListDelete_Sq(SqList *LA, int i, ElemType *e){/*在顺序线性表L中删除第i个元素,并用e返回其值 //i的合法值为1≤i≤Listlength_Sq(L)*/ ElemType *q, *p;int n=0; /*定义局部变量*/ if((i1)||(i(*LA).length)) return ERROR ; /*i值不合法*/ p=((*LA).elem[i-1]); /*p为被删除元素的位置*/ *e=*p; /*被删除元素的值赋给e*/ q=(*LA).elem+(*LA).length-1; /*表尾元素的位置*/ for(++p;p=q;++p) {*(p-1)=*p;++n;} /*被删除元素之后的元素左移*/ printf("n=%d\n",n); --(*LA).length; /*表长减1*/ return OK;} Status BuildList_Sq(SqList *LA){/*不断调用插入函数,在表尾插入数据元素,建立线性表*/ int i,e; scanf("%d",e); while(e!=-1) {i=(*LA).length+1; /*/bb表尾/bb*//b/ppb ListInsert_Sq(LA,i,e); /*/bb表尾插入/bb*/ scanf("%d",e);} return OK;} Status PrintList_Sq(SqList *LA){/*输出线性表*/ int i,len; len=(*LA).length; /*L长度-len*/ for(i=0;ilen;i++) printf("addr=%u, val=%d\n",((*LA).elem[i]),(*LA).elem[i]); return OK;} void main( ){ SqList *LA; /*定义顺序表变量La*/ ElemType a, *e; printf("start...\n"); LA=(SqList *) malloc (1*sizeof(SqList)); InitList_Sq(LA); /*1创建空表*/ BuildList_Sq(LA); /*2建立非空表*/ PrintList_Sq(LA); /*显示表*/ scanf("%d",a); /*输入要插入的元素*/ ListInsert_Sq(LA,1,a); /*3插入元素a*/ PrintList_Sq(LA); /*显示表*/ e=(ElemType *) malloc(1*sizeof(ElemType)); printf("\n"); ListDelete_Sq(LA,2,e); /*4 删除元素*/ PrintList_Sq(LA); /*显示表*/ printf("\n completed \n");}

(责任编辑:IT教学网)

更多

推荐综合特效文章