| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3068 人关注过本帖
标题:[C语言链表]怎样在一个顺序表中删所有的x元素
只看楼主 加入收藏
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
结帖率:66.67%
收藏
已结贴  问题点数:8 回复次数:10 
[C语言链表]怎样在一个顺序表中删所有的x元素
在一个顺序表中删所有的x元素
#include <stdio.h>
#define maxsize 30
typedef struct
{
    int elem[maxsize];
    int length;    //线性表长度
}seqlist;

void input(seqlist *A)
{
    int i,n;
    printf("input the total numbers of elem n:\t");
    scanf("%d",&n);
    A->length=n;
    for(i=0;i<A->length;i++)
    {
        printf("input the %d number:\t",i+1);
        scanf("%d",&elem[i]);
    }
}

int delet(seqlist *A,int i,int x)    // i表示x元素所在的位置
{
    int j;
    if(i<1 || i>A->length)
    {
        printf("已超出长度范围,表中未发现 x");
        return ERROR;
    }
    else
    {
        for(i=0;i<A->length;i++)
        {
            if(elem[i+1]==x)
            {
                for(j=i;j<A->length-1;j++)
                    A->elem[j]=A->elem[j+1];
                A->length--;
                return TRUE;
            }
        }
    }
}

void output(seqlist *A)
{
    int i;
    printf("the order of the elem now is:\t");
    for(i=0;i<A->length;i++)
        printf("%d",elem[i]);
    printf("\n");
}

void mian()
{
    seqlist *A;
    int x;
    input(A);
    output(A);
    printf("input what you want to delete:\t",x);
    scanf("%d",&x);
    delet(A,i,x);
    output(A);
}









搜索更多相关主题的帖子: include 线性表 C语言 numbers 元素 
2016-09-13 18:06
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
收藏
得分:0 
真的求各路大仙指点
2016-09-13 18:35
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:1 
大致看了一下,指出几点:
printf("input what you want to delete:\t",x);这行有误把后面的,x去掉。
printf("input the %d number:\t",i+1);同上
delet(A,i,x);i从何来?
你的链表没有头指针,只有一项数据。
ps:你确认老师让你这么做?而不是删除链表中节点元素与x相等的节点?
2016-09-13 18:51
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
收藏
得分:0 
对,就是删除链表中节点元素与x相等的节点,那该怎么改呢?
2016-09-13 18:57
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
2016-09-13 19:05
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:1 
居然忘了,为了调试上贴,我专门编了个。
#include <stdio.h>
#include <stdlib.h>
struct student
 {
     int num;
     
     float score;
     struct student *next;
 };
int n=0;

struct student del(struct student **head,int num)
 {
     struct student *p1,*p2,*temp;
     int flag=0;
     if(*head==NULL)
     {
         printf("\nThis list is null!\n");
        return *p1;
     }
     p1=*head;                                     //为什么这里是p1指向head而不是head指向p1            
loop:     while(p1->num!=num && p1->next!=NULL)               
      {
          p2=p1;                                         //
         p1=p1->next;                                //
     }
      if(p1->num==num)
      {
          if(p1==*head)
          {
              *head=p1->next;
              temp=p1;
              p1=p1->next;
              free(temp);
          }
          else
          {
          p2->next=p1->next;
          temp=p1;
          p1=p2->next;
          free(temp);
          }
          printf("\nDeleat NO:%d succesed!\n",num);
          n=n-1;
          flag=1;
      }
      if(p1!=NULL)goto loop;
     if(!flag)
     {
         printf("%d not been found!\n",num);
     }
 
 }
 
 void Insert(struct student **head)
{
    int num;
    float score;
    struct student *p1,*r;
    printf("请输入学号,成绩\n");
    scanf("%d%f",&num,&score);
    r= (struct student *)malloc(sizeof(struct student));
    if(*head==NULL)
    p1=*head=r;
    else
    {
        for(p1=*head;p1->next!=NULL;p1=p1->next);
        p1->next=r;
    }
    r->num=num;
    r->score=score;
    r->next=NULL;
    n++;
}
void show(struct student *head)
{
    struct student *p1;
    if(head==NULL)
    return;
    else
    {
        for(p1=head;p1!=NULL;p1=p1->next)
        printf("%d %f\n",p1->num,p1->score);
    }
}
main()
{
    struct student *head;
    int a,num;
    head=NULL;
    while(scanf("%d",&a))
    {
        printf("请输入选项:(1添加。2删除。3显示)");
        if(a==1)
        Insert(&head);
        else if(a==2)
        {
            printf("输入学号\n");
            scanf("%d",&num);
            del(&head,num);
        }
        else if(a==3)
        show(head);
    }
}
2016-09-13 19:14
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
收藏
得分:2 
#include <stdio.h>
#define maxsize 30
typedef struct
{
    int elem[maxsize];
    int length;    //线性表长度
}seqlist;

void input(seqlist *A)
{
    int i,n;
    printf("input the total numbers of elem n:\t");
    scanf("%d",&n);
    A->length=n;
    for(i=0;i<A->length;i++)
    {
        printf("input the %d number:\t",i+1);
        scanf("%d",&A->elem[i]);
    }
}

int delet(seqlist *A,int i)    // i表示x元素所在的位置
{
    int j;
    if(i<1 || i>A->length)
    {
        printf("已超出长度范围,表中未发现 x");
        return 0;
    }
    else
    {
        for(i=0;i<A->length;i++)
        {
            if(A->elem[i+1]=='x')
            {
                for(j=i;j<A->length-1;j++)
                    A->elem[j]=A->elem[j+1];
                A->length--;
                return 1;
            }
        }
    }
}

void output(seqlist *A)
{
    int i;
    printf("the order of the elem now is:\t");
    for(i=0;i<A->length;i++)
        printf("%d",A->elem[i]);
    printf("\n");
}

void main()
{
    seqlist *A;
    int x,i;
    input(A);
    output(A);
    printf("input what you want to delete:\t");
    scanf("%d",&x);
    delet(A,x);
    output(A);
}

编译没有错误
2016-09-13 19:45
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
收藏
得分:0 
回复 7楼  平常心q
好的,非常感谢您,但我发现运行时当界面首先显示input函数里的 printf("input the total numbers of elem n:\t");这一句时,我输入了n的值后,发现没有下文了,直接就是请按任意键继续....这是怎么回事呢?

[此贴子已经被作者于2016-9-13 23:27编辑过]

2016-09-13 23:24
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:3 
#include <stdio.h>
#define maxsize 30
typedef struct
{
    int elem[maxsize];
    int length;    //线性表长度
}seqlist;

void input(seqlist *A)
{
    int i,n;
    printf("input the total numbers of elem n:\t");
    scanf("%d",&n);
    A->length=n;

    for(i=0;i<A->length;i++)
    {
        printf("input the %d number:\t",i+1);
        scanf("%d",&A->elem[i]);
    }
}

int delet(seqlist *A,int x)
{
        int i,j;
        for(i=0;i<A->length;i++)
        {
            if(A->elem[i]==x)
            {
                for(j=i;j<A->length-1;j++)
                    A->elem[j]=A->elem[j+1];
                A->length--;
            }
        }
        return 1;
}

void output(seqlist *A)
{
    int i;
    printf("the order of the elem now is:\t");
    for(i=0;i<A->length;i++)
        printf("%d",A->elem[i]);
    printf("\n");
}

void main()
{
    seqlist *A,seq;
    A = &seq;
    int x;
    input(A);
    output(A);
    printf("input what you want to delete:\t");
    scanf("%d",&x);
    delet(A,x);
    output(A);
}
2016-09-13 23:50
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
收藏
得分:0 
回复 9楼 word123
谢谢啊亲,那main函数里开始的
     seq;
    A = &seq;

是干什么的呢?
2016-09-14 10:11
快速回复:[C语言链表]怎样在一个顺序表中删所有的x元素
数据加载中...
 
   



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

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