线性表最简单的表示

#include <stdio.h>
#include <stdlib.h>
#define list_maxsize 100
typedef int ElemType ;
 struct  List
{
    ElemType data[list_maxsize];  
    int length;
} ;

/* 初始化锭表  */
void InitList(struct  List L)
{
    /*     设置长度为0,其实就是一个空链表  */
    L.length= 0 ;
}

/* 获得链表长度  */
int getLength(struct List L)
{
    return L.length;
}
/* 向链表中添加元素  */
struct List InsertList(struct List L , int pos, ElemType e)
{
    int i ;
    if(pos < 1 || pos > L.length + 1)
    {    
        /* 若pos越界则插入失败 */
        exit(1);
    }
    /* 向右移动元素  */
     for(i = L.length - 1; i >= pos-1; i--)
    {
        L.data[i + 1] = L.data[i];
    }
     L.data[pos - 1] = e;  
     L.length++;
     return L;
}

struct List InsertLast(struct List L,ElemType e)
{
    L.data[L.length]= e ;
    L.length++;
    return L;
}

/* 删除链表中第I个元素  */
struct List DeleteList(struct List L ,int pos)
{
    ElemType temp;
    int i;
     if(pos < 1 || pos > L.length){        /* pos越界则删除失败 */
        printf("pos值越界,不能进行删除操作! ");
        exit(1);
    }
    temp = L.data[pos-1];
    for(i=pos;i<L.length;i++)
        L.data[i-1] = L.data[i];
    L.length--;
    return L;
}

/* 按值删除 */
struct List DeleteListByValue(struct List L ,ElemType x)
{
    int i,j;
    for(i=0;i<L.length;i++){
        if(L.data[i]==x){
            break;
        }
    }
    if(i==L.length){/* 表明没有要删除的值,则直接返回  */
        exit(1);
    }
    for(j=i+1;j<L.length;j++){
       L.data[j-1] = L.data[j];
    }
    L.length--;
    return L;
}

/* 指定在第i个位置更新值X  */
struct List UpdateList(struct List L,int i,ElemType x)
{
    if(i<1 || i>L.length){
       exit(1);
    }
    L.data[i-1] = x ;
    return L;
}

/* 指定相应的值,修改为新的值 */
struct List UpdateListByValue(struct List L , ElemType oldvalue , ElemType newvalue)
{
    int i ;
    for(i=0;i<L.length;i++)
    {
        if(L.data[i]==oldvalue){
           break;
        }
    }
    if(i==L.length){
        exit(1);
    }
    L.data[i] = newvalue;
    return L ;
}

/* 值排序 */
struct List SortList(struct List L)
{
    int temp;
    int i;
    for(i=0;i<L.length;i++)
    {
        if(L.data[i]<L.data[i+1])
        {
            temp = L.data[i];
            L.data[i+1] =L.data[i];
            L.data[i] =temp;
        }
    }
    return L;
}

/* 显示链表所有信息  */
void Display(struct List L)
{
    int i;
    for(i=0;i<L.length;i++)
    {
        printf("%d ",L.data[i]);
    }    
    printf("\n");
}

/*主函数   */
main()
{
     struct List newList;
     int i ;
     int array[5]={11,12,13,14,15};
/*     初始化链表  */
     for(i=0;i<5;i++)
    {
        newList.data[i] = array[i];
        newList.length++;
    }    
    /* 在链表中第2个位置上插入一个34的值  */
    L = InsertList(newList,4,64);
    /* 显示链表中的值  */
    Display(L);
    /* 按下标删除  */
    L = DeleteList(L,2);
    Display(L);
    /* 按值删除链表内容  */
    L = DeleteListByValue(L,13);
    Display(L);
    /* 更新值  */
    L = UpdateList(L,4,88);
    Display(L);
    
    /*指定的位置上修改该值 */
    L = UpdateListByValue(L,88,18);

    Display(L);

 }

  每当第一次看数据结构的时候,总之不知道如何看起,一来就是指针,自己看了大半天,也没有弄个明白!所以一气之下,用了这种方式先结构数组的方式写一个, 之后再改进,再把这种理解的方式改成为指针,其实数据结构,无论是什么语言都可以写的!只是一般情部下用C或C++写是因为可以简单的描述,同时也使用了 指针的特性,如果有不太懂、或不太明白指针的朋友,不防先看看这个案例,也许对你理解有帮助。你把这案例理解透了,再改写自己的代码,把它写在为指针的方 式,到时就不困难了,加油吧!正在学习数据结构的同志们,再过几年就是我们80后人的天下了,努力!吃透,有时真的很辛苦,坚持就是胜利。这个案例只适合 初学者, 有不好的地方,请大家理解!我也是初学者!只不过先前做过.Net方面的开发!以前没有学过数据结构。

 

 

posted @ 2010-01-14 20:27  平凡网客  阅读(487)  评论(0编辑  收藏  举报