#include<stdio.h> #include<malloc.h> #define OK 1 #define ERROR 0 #define OVERLOW -2 typedef int ElemType; typedef int Status; typedef struct sqlist{ ElemType data;//数据域 struct sqlist *next;//指针域 }SqList; //得到该线性表的长度 int GetLen(SqList *L){ if(!L){ printf("线性表为空,可能未创建或被销毁\n"); return ERROR; } int len=0; while(L!=NULL){ len++; L = L->next; } return len; } //打印线性表的信息 Status PrintSqList(SqList *L){ // int GetLen(SqList *L); //声明要调用的函数,如果该函数在本函数的上面,那么就可以不用声明 if(!L){ printf("线性表为空,可能未创建或被销毁\n"); } int len=GetLen(L); printf("长度:%d\n",len); printf("元素列表:"); while(L!=NULL){ printf("%d,",L->data); L=L->next; } printf("\n"); return OK; } //初始化线性表 SqList * InitSqList(SqList *L){ L=(SqList *)malloc(sizeof(SqList));//作为头结点 L->data=-1; L->next=NULL; return L; } //对该线性表添加内容 SqList * AddElem(SqList *L,ElemType e,int i){ if(!L){ printf("线性表为空,可能未创建或被销毁\n"); return NULL; } int length=GetLen(L); if(i<1 || i>length+1){//可以插入在最后 printf("插入的位置错误,不在线性表的范围之内"); return L; } SqList *head=L; SqList *temp=(SqList *)malloc(sizeof(ElemType)); temp->data=e; for(int j=0;j<=length;j++){ if(j==i-1){//第一个 temp->next=L->next; L->next=temp; } L=L->next; } return head; } //对该线性表删除第几个元素 SqList * DelElem(SqList *L,int i){ if(!L){ printf("线性表为空,可能未创建或被销毁\n"); return NULL; } int length=GetLen(L); if(length==0){ printf("表已经为空,不用进行删除操作\n"); } if(i<1 || i>length){ printf("删除的位置有误,不在线性表的范围之内\n"); } SqList *head=L; for(int j=0;j<length;j++){ if(j==i-2&&j>0 ||j==i-1&&j==0){//得到当前删除的前一个节点, SqList *temp=L->next; L->next=L->next->next; free(temp);//释放要删除的节点 return head; } L=L->next; } return head; } //取得第几个元素,在当前线性表中 ElemType GetElem(SqList *L,int i){ if(!L){ printf("线性表为空,可能未创建或被销毁\n"); return NULL; } int length=GetLen(L); if(i<1 || i>length){ printf("获得元素的位置有误,不在线性表的范围之内\n"); return OVERLOW; } SqList *p=L->next;//获得第一个元素 ,因为L是为头结点而不是第一个元素 for(int j=0;j<length;j++){ if(j==i-1){ return p->data; } p=p->next; } return ERROR; } int main(){ SqList *L; L=InitSqList(L); PrintSqList(L); AddElem(L,8,1); PrintSqList(L); AddElem(L,4,1); PrintSqList(L); // DelElem(L,1); // PrintSqList(L); int e=GetElem(L,1); printf("%d\n",e); return 0; }