数据结构顺序表代码(数据结构顺序表代码怎么写)
数据结构顺序表的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");}