| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 338 人关注过本帖
标题:创建顺序表并找其中元素的程序出现奇怪问题
只看楼主 加入收藏
mailahuotui
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-9-8
结帖率:0
收藏
已结贴  问题点数:10 回复次数:2 
创建顺序表并找其中元素的程序出现奇怪问题
我照着书东拼西凑,添油加醋写的程序,但是运行下来发现无论我输入什么元素,printlist出来的都是abcd...这样的连续字母,很是头疼,来求发现错误!
#include <stdio.h>
#define MAXSIZE 20
typedef char ElemType;
typedef struct{
    ElemType elem[MAXSIZE];
    int len;
}SqList;
//以下函数声明
void creatlist(SqList*L,int n);
void printlist(SqList*L);
int find(SqList*L,ElemType x);
main()
{
    int len;
    char e;
    SqList list;
    printf("\n---creatlist---\n");
    printf("please input len:");
    scanf("%d",&len);
    creatlist(&list,len);
    printlist(&list);
    printf("\npiease input find element:");
    scanf("%c",&e);
    find(&list,e);
   
    getchar();
}
//以下函数定义
void creatlist(SqList*L,int n){
    int k;
    printf("\nplease input element:");
    for(k=1;k<=n;k++)
        scanf("%c",&L->elem[k]);
    L->len=n;
}
void printlist(SqList *L){
    int k;
    printf("list have %d element:",L->len);
    for(k=1;k<=L->len;k++)
        printf("%c",&L->elem[k]);
}
int find(SqList*L,ElemType x){
    int i;
    for(i=1;i<=L->len;i++)
        if(L->elem[i]==x) return i;
        return -1;
}
搜索更多相关主题的帖子: include please 元素 
2012-11-08 21:30
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:5 
不懂帮顶。

有心者,千方百计;无心者,千难万难。
2012-11-09 12:31
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
收藏
得分:5 

   
   #include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define N 100
#define OK 1
#define Error 0
int yes=0;
typedef char elemtype;
typedef struct lnode
{
    char data;
    struct lnode *next;
}lnode,*linklist;
void createlist(linklist *l)
{
    int i,n;
    linklist p;
    char ch;
    printf("请输入单链表的长度:\n");
    scanf("%d",&n);
    *l=(linklist)malloc(sizeof(lnode));
    (*l)->next=NULL;
    printf("请输入单链表中元素:\n");
    for(i=n;i>0;i--)
    {
        p=(linklist)malloc(sizeof(lnode));
        scanf("%c",&ch);
        if((ch=getchar())!='\n')
        {
            p->data=ch;
            p->next=(*l)->next;
            (*l)->next=p;
        }
    }
    yes=1;
}
int length(linklist *l)
{
    int i=0;
    linklist p;
    p=(*l)->next;
    while(p!=NULL)
    {
        i++;
        p=p->next;
    }
    return i;
}
display(linklist *l)
{
    linklist q;
    int i;
    printf("此时单链表元素:\n");
    for(i=1;i<=length(l);i++)
    {
        printf("%3d",i);
    }
    printf("\n");
    q=(*l)->next;
    while(q)
    {
        printf("%3c",q->data);
        q=q->next;
    }
    printf("\n");
}
listdelete(linklist l,int i,char*e)
{
    linklist p=l,q;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i-1)
        return -1;
    q=p->next;
    *e=q->data;
    free(q);
    return *e;
}
int listinsert(linklist l,int i,char e)
{
    linklist p=l,s;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i-1)
        return -1;
    s=(linklist)malloc(sizeof(lnode));
    s->data=e;
    s->next=p->next;
    p->next=p->next;
    p->next=s;
    return OK;
}
destroylist(linklist l)
{
    linklist p=l,q=l->next;
    while(q)
    {
        free(p);
        p=q;
        q=q->next;
    }
    free(q);
    yes;
}
listempty(linklist l)
{
    return (l->next==NULL);
}
void menu()
{
    printf("                 单链表基本操作实验                   \n");
    printf("******************************************************\n");
    printf("请选择命令序号(0-7):                                 *\n");
    printf("*1创建链表;                                   *\n");
    printf("*2链表插入;                                          *\n");
    printf("*3链表删除;                                          *\n");
    printf("*4求链表长度;                                        *\n");
    printf("*5判断链表是否为空;                                  *\n");
    printf("*6链表输出;                                          *\n");
    printf("*7单链表销毁;                                        *\n");
    printf("*0程序结束.                                          *\n");
    printf("******************************************************\n");
}
void function()
{
    linklist l;
    int i,sel;
    char ch,e;
    while(l)
    {
        menu();
        printf("请输入命令号(0-7):\n");
        scanf("%d",&sel);
        switch(sel)

        {
            case 1:
                {
                    createlist(&l);
                    printf("单链表创建成功!\n");
                    break;
                }
            case 2:if(yes==0)
                   {
                       printf("此时表未创建!不能插入元素!\n");
                       break;
                   }
                else
                {
                    printf("请输入要插入的位置:\n");
                    scanf("%d",&i);
                    printf("请输入要插入的值:\n");
                    scanf("%c",&e);
                    if((e=getchar())!='\n')
                        listinsert(l,i,e);
                    break;
                }
            case 3:if(yes==0)
                   {
                       printf("此时表未创建!不能删除元素!\n");
                       break;
                   }
                else
                {
                    printf("请输入要删除位置:\n");
                    scanf("%d",&i);
                    listdelete(l,i,&ch);
                    break;
                }
            case 4:if(yes==0)
                   {
                       printf("此时表未创建!不能求单链表长度!\n");
                       break;
                   }
                else
                {
                    printf("单链表的长度是%d\n",length(&l));
                    break;
                }
            case 5:if(yes==0)
                   {
                       printf("此时表未创建!\n");
                       break;
                   }
                else if(listempty(l))
                    printf("当前的单链表是空表!\n");
                else
                    printf("当前单链表为非空表!\n");
                break;
            case 6:if(yes==0)
                   {
                       printf("此时表未创建!不能输出线性表!\n");
                       break;
                   }
                else
                {
                    display(&l);
                    break;
                }
            case 7:if(yes==0)
                   {
                       printf("此时表未创建!不能销毁单链表!\n");
                       break;
                   }
                else
                {
                    destroylist(l);
                    printf("单链表已被销毁!\n");
                    break;
                }
            case 0:exit(1);break;
            default:
                printf("输入命令错误!请重新输入:\n");
                break;
        }
    }
}
int main(void)
{
    function();
    return OK;
}



菜鸟也疯狂
2012-11-09 12:36
快速回复:创建顺序表并找其中元素的程序出现奇怪问题
数据加载中...
 
   



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

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