| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 385 人关注过本帖
标题:请大家看看有没有什么还没有注意到的地方!
只看楼主 加入收藏
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
结帖率:89.66%
收藏
已结贴  问题点数:60 回复次数:2 
请大家看看有没有什么还没有注意到的地方!
学数据结构,线性表这里,然后用C语言写着试了一下,不知道有没有什么地方没有考虑到,或者哪里实现的不对,还请大家指点!
程序代码:
// 线性表.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

//typedef  ElemType   int ;
#define LIST_INIT_SIZE  100//线性表存储空间的初始分配量
#define LISTINCREMENT  10  //线性表存储空间的分配增量

typedef  struct {
    int  *elem;      //存储空间基地址
    int length;      //当前长度
    int listsize;    //当前分配的存储容量
}SqList;

int j=0;
int  InitList_Sq(SqList &L) //初始化一个空线性表
{
    L.elem=(int *)malloc(LIST_INIT_SIZE *sizeof(int));
    if(!L.elem)
        return 0;
    L.length=0;
    L.listsize=LIST_INIT_SIZE;
    return 1;
}

int ListInsert_Sq(SqList &L,int i,int e) //插入操作
{
    if(L.length>=L.listsize)
    {
        L.elem=(int *)realloc(L.elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(int));//进行空间再分配
        if(!L.elem)
            return 0;
        L.listsize+=LISTINCREMENT;
    }
    if(i<1||i>L.length+1)                                                //这里i的值不能小于1,也不能大于最长长度的下一个位置   
        return 0;
    for(j=L.length-1;j>=i-1;j--)
        L.elem[j+1]=L.elem[j];
    L.elem[i-1]=e;                                                      //如果要插入的是第一个数,则在这里会实现
    ++L.length;                                                         //注意别忘了,这里的长度值要加1
    return 1;
}

int ListEmpty(SqList L)      //判断线性表是否为空
{
    if(L.length==0)
        return  1;
    else
        return 0;
} 

int ListDelete_Sq(SqList &L,int i,int &e)                //用e返回要删除的值
{
    if(ListEmpty(L))
        return 0;
    if(i<0||i>L.length)
        return 0;
    e=L.elem[i-1];
    for(j=i;j<L.length;j++)
        L.elem[j-1]=L.elem[j];         //后面往前面移动
    L.length--;                        //这里的length值要减一
    return e;
}

int ListLength(SqList L)               //求线性表的长度
{
    return L.length;
}

int GetElem(SqList L,int i,int &e)    //获取线性表的某个位置的元素
{
    if (i<0||i>L.length)
    {
        return 0;
    }
    e=L.elem[i-1];
    return e;
}
int DestoryList(SqList  &L)
{
    if(L.elem)
    {
        free(L.elem);
        L.length=0;
    }
    return 1;
}

int ClearList(SqList   &L)
{
    if(L.elem)
    {
        L.length=0;
    }
    return 0;
}

int ListTraverse(SqList L)
{
    if (!L.elem||ListEmpty(L))              //如果此时线性表被销毁了,或者它是空表
    {
        printf("It is an Empty List!");
    }
    else       
        for(int i=0;i<L.length;i++)
        {
            printf("%2d",L.elem[i]);
        }
        return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    SqList  Sq;
    int e;
    InitList_Sq(Sq);
    for(int i = 1 ;i< 5; i++)
        ListInsert_Sq(Sq,i,i);   
    printf("%d",ListLength(Sq));
    printf("\n");
    printf("%d\n",GetElem(Sq,3,e));   
    for(int i=4;i>=1;i--)
    {
        printf("The element to be deleted is%2d\n",ListDelete_Sq(Sq,i,e));
        printf("Now the length of the List is %3d\n",ListLength(Sq));
        printf("\n");
    }   
    ListTraverse(Sq);
    ClearList(Sq);
    DestoryList(Sq);
    getchar();
    return 0;
}

是按着书上来的,如果大家有好的代码可以发上来我学习下!或者介绍个好的网上学习数据结构的好地方!谢谢了!

搜索更多相关主题的帖子: 控制台 线性表 C语言 应用程序 color 
2011-08-13 16:13
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:60 
楼主好兴致,楼主学算法到一定程序了可以去看看这个:http://blog.
2011-08-13 17:41
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:0 
回复 2楼 loveshuang
谢谢啊!

付出终将有回报!Ibelieve!
2011-08-13 21:27
快速回复:请大家看看有没有什么还没有注意到的地方!
数据加载中...
 
   



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

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