线性表的链式存储实现

线性表的链式存储实现,第1张

1. *** 作实现截图 2.代码实现

1.

 

2.

#include
#include
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElementType;
typedef struct LNode *List;
struct LNode{
    ElementType Data;
    List Next;
};
struct LNode L;
//List PtrL;  //链表指针的定义移动到主函数里,不需要全局变量
//表的创建(尾插法)
void CreateListTail(List* PtrL,int m[],int n){//函数修改
//void CreateListTail(List PtrL,int m[],int n)
    List p,s;
    int i;
    (*PtrL)=(List)malloc(sizeof(LNode));// 修改
    //PtrL=(List)malloc(sizeof(LNode));
    s=(*PtrL);                          // 表创建函数修改
    //s=PtrL;
    for(i=0;iData=m[i];
        s->Next=p;
        s=p;
    }
    s->Next=NULL;
}
//求表长
int Length(List PtrL){
    List p=PtrL;/* p指向表的第一个结点*/
    int j=0;
    while(p){
        p=p->Next;
        j++;/* 当前p指向的是第 j 个结点*/
    }
    return j;
}
//获取元素
Status Get(List PtrL,int i,ElementType *e){
    int j;
    List p;
    p=PtrL->Next;
    j=1;
    while(p&&jNext;
        ++j;
    }
    if(!p||j>i){
        return ERROR;
    }
    *e=p->Data;
    return OK;
}
//查找
//按序号查找 
List FindKth(int K,List PtrL){
    List p=PtrL;
    int i=1;
    while(p!=NULL&&iNext;
        i++;
    }
    if(i==K)
    return p;/* 找到第K个,返回指针 */
    else
    return NULL;/* 否则返回空 */
}
/*
//按值查找
List Find(ElementType X,List PtrL){
    List p=PtrL;
    while(p!=NULL&&p->Data!=X)
    p=p->Next;
    return p;
}
*/
//插入 
List Insert(ElementType X,int i,List PtrL){
    List p,s;
    if(i==1){/* 新结点插入在表头 */
        s=(List)malloc(sizeof(struct LNode));/*申请、填装结点*/
        s->Data=X;
        s->Next=PtrL;
        return s;
    }
    p=FindKth(i,PtrL);/* 查找第i个结点 */
    if(p==NULL){/* 第i-1个不存在,不能插入 */
        printf("参数i错");
        return NULL;
    }
    else{
        s=(List)malloc(sizeof(struct LNode));/*申请、填装结点*/
        s->Data=X;
        s->Next=p->Next;/*新结点插入在第i个结点的前面*/
        p->Next=s;
        return PtrL;
    }
}
//删除
List Delete(int i,List PtrL){
    List p,s;
    if(i==1){/* 若要删除的是表的第一个结点 */
        s=PtrL;/*s指向第1个结点*/
        if(PtrL!=NULL)
        PtrL=PtrL->Next;/*从链表中删除*/
        else
        return NULL;
        free(s);
        return PtrL;
    }
    p=FindKth(i-1,PtrL);/*查找第i-1个结点*/
    if(p==NULL){
        printf("第%d个结点不存在",i);
        return NULL;
    }
    else if(p->Next==NULL){
        printf("第%d个结点不存在",i);
        return NULL;
    }
    else{
        s=p->Next;/*s指向第i个结点*/
        p->Next=s->Next;/*从链表中删除*/
        free(s);/*释放被删除结点 */
        return PtrL;
    }
} 
//输出
Status Output(List PtrL)
{
    List p;
    p=PtrL->Next;
    while(p){
        printf("%d ",p->Data);
        p=p->Next;
    }
    printf("\n");
}
int main(){
    List PtrL;  //链表指针定义移动到主函数里
    int i,k,j,n,e,m[1000];
    printf("请输入要存储元素的总个数:");
    scanf("%d",&n);
    printf("请输入各个元素的值:");
    for(i=0;i

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1498771.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-25
下一篇2022-06-25

发表评论

登录后才能评论

评论列表(0条)