栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

王道c语言督学 数据结构中级day 5

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

王道c语言督学 数据结构中级day 5

输入3 4 5 6 7 9999一串整数,9999代表结束,通过尾插法新建链表,查找第二个位置的值并输出,在2个位置插入99,输出为  3 99  4  5  6  7,删除第4个位置的值,打印输出为  3 99  4  5  6  7。

输出函数如下:

void PrintList(LinkList L)

{

L = L->next;

while (L != NULL)

{

printf("%3d", L->data);//打印当前结点数据

L = L->next;//指向下一个结点

}

printf("n");

}

我的代码如下:

#include
#include
typedef int Elemtype;
typedef struct LNode
{
     Elemtype data;
     struct LNode *next;
}LNode,*Linklist;

//定义一个输出函数 
void print(Linklist L)
{
    L=L->next;
    while(L->next!=NULL)
     {
         L=L->next;
        printf("%3d",L->data);
    } 

}
//查找某个序号的值 
Linklist GetElem(Linklist L,int x)
{
    LNode*p=L->next;
    int j=1;
    if(x==0&&x<1)
    {
        return L; 
    }
    while(p!=NULL&&j     {
        p=p->next;
        j++;        
    }
    return L;
}

//通过尾插法建立单链表 
Linklist creatlist(Linklist &L)//通过尾插法建立单链表 
{
    int x;
    L=(LNode *)malloc(sizeof(LNode)); //建立新的节点 
    LNode *p,*s=L;//将L的地址赋给p和s,使他们指向链表 
    scanf("%d",&x); 
    while(x!=9999)
    {
        s=(LNode *)malloc(sizeof(LNode));//建立新的节点 
        s->data=x;        //赋到s节点的数据域 
        p->next=s;
        p=s;   //将s所存地址赋给p,p指向新的节点 
        scanf("%d",&x);//循环赋值 
            
    }
        p->next=NULL;//直到指针域为空时停止 
        return L;
}

//根据题目条件插入节点 
Linklist tailinsert(Linklist &L,int x)//根据题目条件插入 
{
    L=(LNode *)malloc(sizeof(LNode)); //建立新的节点 
    LNode *s=L;//将L的地址赋给s,使他们指向链表 
    LNode*p=GetElem(L,x-1);//找到插入序号的前一个节点,并将地址赋给指针p,使其指向前面的节点 
        s=(LNode *)malloc(sizeof(LNode));//建立新的节点 
        s->data=99;        //赋到s节点的数据域 
        p->next=s;//让节点p的指针域指向s 
        p=s;   //将s所存地址赋给p,p指向新的节点 
        scanf("%d",&x);//循环赋值 
        p->next=NULL;//直到指针域为空时停止 
        return L;
}

//删除节点 
Linklist Delete(Linklist L,int x)
   {
       LNode *p=GetElem(L,x-1);
       LNode *s=GetElem(L,x);//指向需要删除的节点 
       p->next=s->next;//将s下一个节点的地址赋给p的指针域,p的指针域则指向s的下一个节点 
       p=s->next;//工作指针p指向s节点的下一个节点 
       free(s);
       return L;
   }
   
   int main()
   {
       Linklist L;
       GetElem(L,2);
       creatlist(L);
       LNode *s; //和Linklist s同样的效果 
    s=GetElem(L,2); 
    printf("%d",s->data);
    printf("插入节点序号为2的地方");
       tailinsert(L,2);
       print(L);
    printf("删除的序号为4的地方");
       Delete(L,4);
       print(L);
       
   }

通信跨考计算机,不对的地方可以一起讨论一下

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014991.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号