| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 782 人关注过本帖
标题:一个顺序表的程序 急
只看楼主 加入收藏
imissing
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2009-4-10
结帖率:100%
收藏
 问题点数:0 回复次数:1 
一个顺序表的程序 急
#include <stdio.h>
#include <stdlib.h>
#define LIST_INTSIZE 50
typedef char DataType;                                  /*在此例中数据类型采用字符类型*/
   

typedef  struct {   DataType*  elem;                    /*线性表的基地址*/
                    int  length;                        /*线性表当前的长度*/
                    int  listsize;                        /*线性表当前分配的存储容量*/
                } SeqList;   

int InitSeqList(SeqList* L)
{
    L->elem=(DataType *)malloc((LIST_INTSIZE+1)*sizeof(DataType));  /*数组的0元素没有使用*/
    if (L->elem==NULL)
    {
        printf("\t\t\t内存分配错误\n");
        return 0;
    }
    L->length=0;
    L->listsize=LIST_INTSIZE;  
    printf("\t\t\t内存分配成功\n");
    return 1;
}

int  InsertSeqList(SeqList* L, int i, DataType x)
{
    int m;
    if(i<1||i>(L->length+1))
    {
        printf("元素插入的位置不合法!");
    }
      if(L->length>L->listsize)
    {
        printf("顺序表已满,不能再插入!");
    }
    if(i<1&&i<L->length+1)
    {
    for(m=L->length;m>i;--m)
    {
          L->elem[m+1]=L->elem[m];
          L->elem[i]=x;
         
    }
    printf("已经在顺序表的第%d个位置插入元素%c",i,x);
          L->length++;
   
         }
    return 1;
}


int DeleteSeqList(SeqList* L, int i)
{
    if(i<1||i>(L->length))
    {
    printf("删除位置%d不合理!",i);
    }
    else{
        for(i;i<L->length+1;i++)
        {
            L->elem[i]=L->elem[i+1];
             printf("已经删除了顺序表的第%d个位置的元素",i);
                L->length=L->length-1;
        }
    }
    return  1;
}

int LenSeqList(SeqList* L)
/* 返回顺序表L的长度*/
{    int  n=0;
    n=L->length;
    printf("当前顺序表的表长为%d",n);
   
    return  1;
}

int SearchSeqList(SeqList* L, DataType x)
/*在线性表中查找值为x的数据元素*/
{
    int i=1;
    while(i<=(L->length+1)&&L->elem[i]!=x)
        i++;
    if (i>L->length) return -1;
    else return i;
   
}

DataType GetfromSeqList(SeqList* L, int i)
/*返回线性表中的第i个元素的值*/
{
    return (L->elem[i]);
}

void ShowSeqList(SeqList* L)
{    int i;
    printf("\n\t\t\t显示线性表的所有元素:");
    if(L->length==0)
        printf("\n\t\t\t顺序表为空!\n");
    else
    {
        printf("\n\t\t");
        for(i=1;i<=L->length;i++)
        {    printf("\t%c",L->elem[i]);
        }
    }
}
/* 主函数 */
main()
{    int choice;
    int i;
    int j=1;
    SeqList L;
    DataType x;
    while(j)
    {    printf("\n\n\n\n");
        printf("\t\t\t--线 性 顺 序 表--\n");
        printf("\n\t\t\t************************************");
        printf("\n\t\t\t*       1-------顺序表初始化       *");
        printf("\n\t\t\t*       2-------插               *");
        printf("\n\t\t\t*       3-------删               *");
        printf("\n\t\t\t*       4-------求             *");
        printf("\n\t\t\t*       5-------按 值 查找         *");
        printf("\n\t\t\t*       6-------读取元素值         *");
        printf("\n\t\t\t*       7-------显示线性表         *");
        printf("\n\t\t\t*       0-------退               *");
        printf("\n\t\t\t************************************\n");
        printf("\t\t\t请选择菜单号(0--7):");
        scanf("%d",&choice);getchar();
        if(choice==1)
            
            InitSeqList(&L);
        else if (choice==2)
        {    printf("\n\t\t\t请输入的位置i和数值x(输入格式:i,x):");
            scanf("%d,%c",&i,&x);
            InsertSeqList(&L, i, x);
            
        }
        else if (choice==3)
        {    printf("\n\t\t\t请输入要删除元素的位序:");
            scanf("%d",&i);
            DeleteSeqList(&L, i);
        }
        else if (choice==4)
            LenSeqList(&L);
        else if (choice==5){
            printf("\n\t\t\t请输入要查找的数值x:");
            scanf("%c",&x);
            SearchSeqList(&L,x);
        }
        else if (choice==6)
            GetfromSeqList(&L, i);
        else if (choice==7)
            ShowSeqList(&L);
        else if (choice==0)
        {    j=0;
            printf("\t\t\t程序结束!\n");}
        else printf("\n\t\t\t输入错误!请重新输入!\n");
    }
}

选择2插不进数据,表长也不会增加。。。怎么改正??
搜索更多相关主题的帖子: 顺序 
2009-09-13 22:11
cjzfqm
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-9-13
收藏
得分:0 
if(i<1&&i<L->length+1)
这里的i<1不对吧!
2009-09-22 10:15
快速回复:一个顺序表的程序 急
数据加载中...
 
   



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

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