线性表最简单的表示
#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方面的开发!以前没有学过数据结构。