标题:救救孩子 线性表的链式储存
取消只看楼主
专业课的小白
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2019-12-17
结帖率:40%
已结贴  问题点数:20 回复次数:3 
救救孩子 线性表的链式储存
1)    用C语言编写程序LinkList.cpp实现单链表的各种基本运算。
2)    初始化单链表L,依次从表尾插入100个整数,并按插入顺序输出这100个整数;
3)    删除单链表L中能被3整除的元素,并把剩余元素依次输出;
4)    简单修改程序,实现双向循环链表存储结构
搜索更多相关主题的帖子: 线性表 单链表 孩子 储存 链式 孩子 线性表 单链表 链式 储存 
2020-10-21 20:42
专业课的小白
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2019-12-17
得分:0 
回复 2楼 林月儿
写了一些了。
2020-10-23 20:11
专业课的小白
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2019-12-17
得分:0 
回复 2楼 林月儿
这是我自己写的:还没有写完。我觉得应该有个show
#includestdio.h
#includestdlib.h
#includemalloc.h
typedef struct node
{
    int data;结点中的成员
    struct node next;指针
}lnode,linklist;
单链表的初始化
linklist chushilist()
{
    node l;
    l=(node )malloc(sizeof(node));
    if(l=NULL)
        printf(申请内存空间失败n);
    l-next=NULL;
    return l;
}
单链表的建立(头插法)
linklist toulist()
{
    int i;
    node l;
    l=(node )malloc(sizeof(node));分配空间
    l-next=NULL;
    int x;
    while(scanf(%d,&x)!=EOF)
    {
        for(i=100;i0;i--)
        {
        node p;
        p=(node )malloc(sizeof(node));
        p-data=x;
        p-next=l-next;
        l-next=p;
        }
    }
    return l;
}
单链表的插入(尾插法)
linklist weilist()
{
    node l;
    l=(node )malloc(sizeof(node));
    l-next=NULL;初始化一个空表
    node r;
    r=l;r始终指向终端的结点,开始时指向头结点
    int x;
    while(scanf(%d,&x)!=EOF)
    {
        for(int i=100;i0;i--)
        {
        node p;
        p=(node )malloc(sizeof(node));
        p-data=x;结点的数值域赋值
        r-next=p;
        r=p;
        }
    }
    r-next=NULL;
    return l;
}
单链表的删除,在链表中删除能被三整除的元素
linklist deletelist(linklist l,int x)
{
    node p,pre;
    p=l-next;
    while(p-data!=(x%3==0))
    {
        pre=p;
        p=p-next;
    }
    pre-next=p-next;
    free(p);
    return l;
}
 int main()
 {
     linklist list,start;
     printf(请输入单链表的数据:);
     list=toulist();
     for(start=list-next;start!=NULL;start=start-next)
         printf(%d,start-data);
     printf(n);
     printf(删除的单链表:);

 }


下面这个是查的,但是改不对。
#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LinkNode;
//w尾插法建立单链表
void CreateListR(LinkNode *&L, ElemType a[], int n)
{
    LinkNode *s,*r;
    L=(LinkNode *)malloc(sizeof(LinkNode));//创立头节点
    L->next=NULL;
    r=L;
    for(int i=0;i<n;i++)
    {
        s=(LinkNode *)malloc(sizeof(LinkNode));//创立新的结点
        s->data=a[i];
        r->next=s;//将节点s插入r结点之后
        r=s;
    }
    r->next=NULL;//尾结点next置空
}
//初始化线性表
void InitList(LinkNode *&L)
{
    L=(LinkNode *)malloc(sizeof(LinkNode));//创建头节点
    L->next=NULL;//将单链表置空
}
//插入
bool ListInsert(LinkNode *&L, int i, ElemType e)
{
    int j = 0;
    LinkNode *p = L, *s;                        //p指向头节点,j置为0(即头节点序号为0)
    if(i <= 0)                                    //i错误返回假
        return false;
    while(j < i - 1 && p != NULL){                //查找第i-1个节点p
        j++;
        p = p->next;
    }
    if(p == NULL)
        return false;
    else{
        //将节点s插入
        s = (LinkNode *)malloc(sizeof(LinkNode));
        s->data = e;
        s->next = p->next;
        p->next = s;
        return true;

    }

}
//输出线性表
void DispList(LinkNode *L)
{
    LinkNode *p=L->next;
    while(p!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("\n");
}
//删除能被3整除的元素
bool ListDelete(LinkNode *&L,int i,ElemType &e)
{
    int j=0;
    LinkNode *p=L,*q;
    if(i<=0)
        return false;
    while(j%3==0&&p!=NULL)
    {
        j++;
        p=p->next;
    }
    if(p==NULL)
        return false;
    else{
        q=p->next;
        if(p==NULL)
            return false;
        e=q->data;
        p->next=q->next;
        free(q);
        return true;
        }
}
//销毁线性表
void DestroyList(LinkNode *&L)
{
    LinkNode *pre = L, *p = pre->next;
    while(p != NULL)
    {
        free(pre);
        pre = p;    //pre、p同步后移一个节点
        p = pre->next;
    }
    free(pre);    //此时p为NULL、pre指向尾节点,释放它
}
int main()
{
    LinkNode *h;
    ElemType e;
    printf("初始化单链表");
    InitList(h);
    printf("依次采用尾插法插入元素");
    ListInsert(h,1,'a');
    printf("  (3)输出单链表h:");
    DispList(h);
    printf("  (10)删除h的第3个元素\n");
    ListDelete(h,3,e);
    printf("  (11)输出单链表h:");   
    DispList(h);
    printf("  (12)释放单链表h\n");
    DestroyList(h);
    return 1;
}
2020-10-23 20:15
专业课的小白
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2019-12-17
得分:0 
回复 7楼 林月儿
int main() {
    int len=100;
    int arr[len];//这里中括号里面的应该时常量


void display(struct node *h){
    printf("遍历单链表:\n");
    int cols=0;                //这里的cols是什么意思呢
    while(h!=NULL){
        printf("%d\t", h->data);
        h=h->next;
        printf(++cols%10==0?"\n":"");    //这句我也不太懂
    }
    printf("\n");
}
2020-10-25 15:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503571-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.776447 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved