数据结构第二次上机

数据结构第二次上机

上机要求:建立一有序的链表并实现线性表的基本操作(初始化、插入、删除、查找等)。

#include <stdio.h>
#include <stdlib.h>typedef struct LinkNode{
    int data;
    struct LinkNode* next;
​
}LinkNode,* LinkList;
​
void InitLinkList(LinkList& L)//初始化一个空表
{
    L=(LinkList)malloc(sizeof(LinkNode));
    L->next=NULL;
}
​
void Insert_head(LinkList &L,int e)//利用头插法 插入e
{
    LinkList s=(LinkList)malloc(sizeof(LinkNode));
    s->data=e;
    s->next=L->next;
    L->next=s;
}
​
void Insert_end(LinkList &L,LinkList &p,int e)//利用尾插法 插入e
{
    LinkList s=(LinkList)malloc(sizeof(LinkNode));
    s->data=e;
    s->next=NULL;
    p->next=s;
    p=p->next;
}
​
​
void PrintLinkList(LinkList L)//打印链表 方便测试
{
    L=L->next;
    while(L!=NULL)
    {
        printf("%4d",L->data);
        L=L->next;
    }
    printf("\n");
}
​
LinkList LocationLinkList(LinkList L,int i)//按位置查找  查找链表中第i个位置的元素
{
    L=L->next;
    int j=1;
    while(L!=NULL)
    {
        if(j==i)
        {
            return L;
        }
        L=L->next;
        j++;
    }
​
    return NULL;
}
​
int LocateLinkList(LinkList L,int e)//按值查找,查找元素e在表中的位置
{
    L=L->next;
    int j=1;
    while(L!=NULL)
    {
        if(L->data==e)
        {
            return j;
        }
        L=L->next;
        j++;
    }
    return -1;
}
​
bool Insert(LinkList &L,int i,int e)//在第i个位置 前插入e
{
    LinkList p=LocationLinkList(L,i-1);//找到插入位置的前一个结点
    if(p!=NULL||p->next!=NULL)
    {
        LinkList s=(LinkList)malloc(sizeof(LinkNode));
        s->data=e;
        s->next=p->next;
        p->next=s;
        return true;
    }
    return false;
}
​
bool DelLinkList(LinkList &L,int i)//删除第i个位置的元素
{
    LinkList p=LocationLinkList(L,i-1);//找到删除位置的前一个结点
    if(p!=NULL||p->next!=NULL)
    {
        LinkList q=p->next;
        p->next=q->next;
        free(q);
        return true;
    }
    return false;
}
​
int main()
{
    LinkList L;
    InitLinkList(L);
    LinkList p=L;//尾插法的指向最后一个元素的指针
    //Insert_head(L,5);
    //Insert_head(L,6);
    Insert_end(L,p,44);
    Insert_end(L,p,33);
    Insert_end(L,p,22);
    Insert_end(L,p,11);
    PrintLinkList(L);
    
    LinkList q=LocationLinkList(L,4);
    printf("q->data=%d\n",q->data);
​
    int m2=LocateLinkList(L,10);
​
    if(m2!=-1)
        printf("m2=%d\n",m2);
    else 
        printf("表中无该数据!\n");
​
    Insert(L,4,55);
    PrintLinkList(L);
    DelLinkList(L,4);
    PrintLinkList(L);
    return 0;
}
posted @   骆宾王  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示