标题:自己写顺序线性链表~~出错咯~~
取消只看楼主
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
结帖率:95.65%
已结贴  问题点数:5 回复次数:16 
自己写顺序线性链表~~出错咯~~
头文件:
程序代码:
/*....This is a head files...*/
#include<stdlib.h>
#define ERROR 0 
#define OverFlow -1 
#define OK 1
#define INCREASE_ADDRESS_MIN 50
#define INCREASE_ADDRESS_MAX 100


typedef int status;//声明status为int型
int GetNumberofUnit(char *p);
char *CreateOrderList(char **p,int num);
void DealError();
status Deal_If_Char(char The_Value);
void InputData(char *p);
void OutPut(char *p);
status InsertValue(char The_value,int Insert_Positon,char *OriginAdress);
status DelData(char *First_Address,int position);
void All_View(char *First_Address);

int GetNumberofUnit(char *p)//计算顺序表单元个数 
{
    int i;
    for(i=0;*(p+i)!=NULL;i++);
    return i; 
}

char* CreateOrderList(char **p,int num)//p用来操作指针变量,num为要创建的顺序表的单元个数 
{
    *p=(char*)malloc((num+1)*sizeof(char));//
    if(!(*p))
    {
       DealError();
    }
    *(*p+num)=NULL;//结束标志 
    return (*p); 
} 

void DealError()//错误处理 
{
        printf("Error!");
        exit(OverFlow);
} 

status Deal_If_Char(char The_Value)//判断是否为字符 
{
    if((The_Value>65&&The_Value<90||The_Value>97&&The_Value<122))
    return OK;
    else
    {
        printf("Error!!!Not a char\n");
        printf("Please Try Again!!\n");
        return ERROR;
    }
}

void InputData(char *p)//输入数据,传入一级指针即可 
{
    char *D_address;//动态变化地址 
    D_address=p;
    printf("%d",GetNumberofUnit(p));//测试语句 
    while(D_address<=p+GetNumberofUnit(p))
    {
        scanf("%c",D_address);//D_address所指的内存单元地址
        D_address++; 
    } 
}

void OutPut(char *p)//输出函数 
{
    char *D_address;//动态地址 
    D_address=p;
    printf("%d",GetNumberofUnit(p));//测试语句 
    while(D_address<=p+GetNumberofUnit(p))
    {
        printf("%c",*p);//取一级指针p所指内存单元的值 
        p++;//地址前进一个sizeof(char)大小 
    }
    
}

status InsertValue(char The_Value,int Insert_Position,char *OriginAdress)
{
    int Current_Address,i;
    char *new_address; char *Point_The_Value;
    Current_Address=GetNumberofUnit(OriginAdress);//获取当前已分配内存单元 
    Deal_If_Char(The_Value);
    if(Insert_Position>0&&Insert_Position<Current_Address)//判断插入位是否合法 
    {
         new_address=(char*)malloc((INCREASE_ADDRESS_MIN+Current_Address)*sizeof(char));//分配一块更大的内存块 
         if(!new_address)
        {// 
            DealError();
        }//
         
         Point_The_Value=new_address+Insert_Position-1;//计算插入位 
         *Point_The_Value=The_Value;//将值插入 
         
           for(i=0;i<Insert_Position-1;i++)//将插入位前段数据复制到新内存 
             *(new_address+i)=*(OriginAdress+i);
           for(i=Insert_Position-1;i<Current_Address-Insert_Position+2;i++)//
             *(new_address+i+1)=*(OriginAdress+i);//此时i为原始内存单元的末位 
             
             i=i+2;                        //末位为标志位 
             *(new_address+i)=NULL;
             return OK;
     
    }
    return ERROR;                                                                                                                             
}

status DelData(char *First_Address,int position)
{
   int i,end_address;char *p;
   end_address=GetNumberofUnit(First_Address);
   p=First_Address+position;//要删除位的后一位 
   if(position<0||position>end_address) return ERROR;
   while(*p!=NULL)
   {
       *(p-1)=*p;
       p++;
   }
   *(p-1)=*p;
   return OK; 
}

void All_View(char *First_Address)//遍历函数 
{
    printf("准备输出:");
    while(*First_Address!=NULL)
    {
        printf("%c ",*First_Address);
        First_Address++;
    }
    
}


主程序
程序代码:
#include <stdio.h>
#include "OrderList.h"

void main()
{
    char *T;
    printf("Start Creating OrderList,");
    T=CreateOrderList(&T,5);//创建顺序线性表. 
    printf("please type data\n");
    InputData(T); //输入数据
    printf("输出第一次输入的数据\n");
    All_View(T);//遍历顺序线性表 
} 


测试时当测试输出总是3,不知CreateOrderList有什么错的~~~。。。
偶的思路是用CreateOrderList分配一块内存单元,num位这块内存单元中char类型元素的个数~~~
偶不才,那位大虾帮看看吧~~~~~
搜索更多相关主题的帖子: status color 
2012-01-24 21:19
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
数据结构真难啃~~~~~

在线等待

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-24 21:22
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
如果认为代码太长,帮看看CreateOrderList这个函数有什么错就好咯~~~
~~~~~也许知识掌握不到位~~~~或是太笨咯
GetNumberOfUnit获得的始终是3。。。。。。。。

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-24 21:28
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
回复 6楼 beyondyf
嗯嗯~~表示写错咯。。。。本来是要写顺序线性表的~~。。。。。

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-24 22:02
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
回复 6楼 beyondyf
版主怎么不见咯~~等得我都要老咯

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 14:44
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
高手指教点啊~~等得花都谢咯

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 15:04
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
回复 10楼 beyondyf
大哥~~~麻烦你解释一下啊~~~~~麻烦咯~~

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 15:48
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
回复 13楼 beyondyf
大哥~~~~能不能告诉我哪里错咯~~~~

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 17:24
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
回复 14楼 fourleaves
数据结构一本书的代码我都有,,,只是我想用自己的想法写写~~~就是不知哪错咯~~~如果不知道自己思路到底哪错咯~~偶永远都不能提高~~~

大虾只要指出哪些语句错在哪~~我自己慢慢写该~~~

大虾~~如果不麻烦的话~~

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 17:28
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
得分:0 
回复 16楼 beyondyf
嗯嗯~~~偶刚上大一~~~可能自学能力有问题~~~

谢谢指点

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 20:59



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




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

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