求一个C语言实现顺序表,要有注释的,谢谢🙏
2条回答 默认 最新
关注 这是我之前学习时,写的,可以看看。有不懂可以问
#include <stdio.h> #include "stdlib.h" /*预定义常量和类型*/ /*函数结果状态码*/ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 /*Status 是函数的类型,其值是函数结果状态代码*/ typedef int Status; typedef char ElemType; //单个元素类型 #define MAXSIZE 100 typedef struct { ElemType *elem; // 数组指针elem指示顺序表的基地址 int length; }SqList; //结构体类型名 : SqList /*1、构造一个空的顺序表L*/ Status InitList_Sq(SqList *L) //结构体指针变量作为形参 { //L.elem=new ElemType[MAXSIZE]; //为顺序表分配空间 (*L).elem =(ElemType *)malloc(sizeof(ElemType)*MAXSIZE); //(*L).elem = L->elem if(!L->elem) exit(OVERFLOW); //异常处理,存储分配失败 L->length=0; //空表长度为0 return OK; //OK=1 } /*2、销毁线性表L */ void DestroyList(SqList *L) { if (L->elem) { free(L->elem); //释放存储空间 } } /*3、清空线性表L*/ void ClearList(SqList *L) { L->length=0; //将线性表的长度置为0 } /*4、求线性表L的长度*/ int GetLength(SqList *L) { return (L->length); // } /*5、判断线性表L是否为空*/ int IsEmpty(SqList *L) { if (L->length==0) return 1; else return 0; } /*6、顺序表的取值(根据位置i 获取相应位置数据元素的内容)*/ int GetElem(SqList *L,int i,ElemType *e) { if (i<1 || i> L->length) return ERROR; //判断i值是否合理,若不合理,返回ERROR *e=L->elem[i-1]; //第i-1 的单元存储着第i个数据 return OK; } /*7、顺序表的查找*/ int LocateELem(SqList *L,ElemType e) { int i; //在线性表L中查找值为e的数据元素,返回其序号(是第几个元素) for (i=0; i< L->length;i++) if (L->elem[i]==e) return i+1; //查找成功,返回序号 return 0; //查找失败,返回0 } /*8、顺序表的插入*/ Status ListInsert_Sq(SqList *L,int i ,ElemType e) { int j; if(i<1 || i>L->length+1) return ERROR; //i值不合法 if(L->length==MAXSIZE) return ERROR; //当前存储空间已满 for(j=L->length-1;j>=i-1;j--) L->elem[j+1]=L->elem[j]; //插入位置及之后的元素后移 L->elem[i-1]=e; //将新元素e放入第i个位置 L->length ++; //表长增1 return OK; } /*9、顺序表元素的删除*/ Status ListDelete_Sq(SqList *L,int Del_Loc) { int j; if((Del_Loc < 1)||(Del_Loc > L->length)) return ERROR; //i值不合法 for (j= Del_Loc; j <= L->length-1; j++) L->elem[j-1] = L->elem[j]; //被删除元素之后的元素前移 --L->length; //表长减1 return OK; } void ListInput(SqList *L, int n) //顺序表数据的输入 { int i = 0; L->length = n; //printf("L->length =%d",L->length); for(i=0;i < n;i++) { scanf("%d",&L->elem[i]); } } void PrintSqList(SqList *L) //顺序表的元素输出 { int i; for(i=0;i < L->length;i++) { printf("%d ",L->elem[i]); } putchar('\n'); } /***************************************************/ int main(int argc, char const *argv[]) { int length; //顺序表的长度 int i; SqList L1; // 声明了结构体变量L if (InitList_Sq(&L1)) // 结构体变量地址作为实参 printf("0 初始化顺序表成功!!!\n"); printf("1 请输入顺序表的长度:"); scanf("%d",&length); printf("2 请输入数据:"); ListInput(&L1, length); //顺序表数据的输入 printf("3 顺序表L1为:"); PrintSqList(&L1); /*4、求线性表L的长度*/ printf("4 L1.length = %d\n",GetLength(&L1)); /*5、判断线性表L是否为空*/ printf("5 断线性表L1是否为空 %d\n",IsEmpty(&L1)); /*6、顺序表的取值(根据位置i 获取相应位置数据元素的内容)*/ ElemType a,*e=&a; GetElem(&L1,2,e); printf("6 L1的第2个元素是:%d\n",*e); /*7、顺序表的查找*/ printf("7 3是在L1中的位置:%d\n",LocateELem(&L1,3)); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用 2
悬赏问题
- ¥15 乌班图ip地址配置及远程SSH
- ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
- ¥15 PSPICE制作一个加法器
- ¥15 javaweb项目无法正常跳转
- ¥15 VMBox虚拟机无法访问
- ¥15 skd显示找不到头文件
- ¥15 机器视觉中图片中长度与真实长度的关系
- ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
- ¥15 java 的protected权限 ,问题在注释里
- ¥15 这个是哪里有问题啊?