skydragon 2008-9-5 21:10
数据结构之实例
在论坛上看了数据结构方面的教程觉得不错 可是没有实例 所以决定自己写些实例
这是个顺寻表的例子[code]#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
struct LIST
{
int data[MAX_SIZE];
int length;
};
typedef struct LIST list;
void InitList(list *L);//初始化线性表
int GetLength(list *L);//返回顺寻表的长度
void GetElem(list *L,int i,int *e);//求表中第i个元素
int Locate(list *L,int x);//查找值为x的元素
void InsElem(list *L,int x,int i);//增加一个元素
void DelElem(list *L,int i);//删除元素
void DispList(list *L);//输出线性表
void main()
{
int get,Ins,Vol,re=0,y,flag=0;
list L;
printf("欢迎使用此程序\n");
printf("正在初始化.........\n");
InitList(&L);
while (1)
{
printf("请选择:\n");
printf("1,增加一个元素\n");
printf("2,删除一个元素\n");
printf("3,查找第一个值为x的元素\n");
printf("4,获取表中某个位置的元素\n");
printf("5,返回表的长度\n");
printf("6,打印表中的元素\n");
printf("7,退出\n");
scanf("%d",&get);
switch (get)
{
case 1:
printf("请输入要增加的元素所处的位置\n");
printf("现在列表中有%d个元素\n",L.length);
scanf("%d",&Ins);
printf("请输入值\n");
scanf("%d",&Vol);
InsElem(&L,Vol,Ins);
break;
case 2:
printf("请输入要删除的元素\n");
printf("此时表的长度是%d\n",L.length);
while (flag==0)
{
scanf("%d",&Vol);
if(Vol<1||Vol>L.length)
printf("错误,请重新输入\n");
else
{
DelElem(&L,Vol);
flag=1;
}
}
break;
case 3:
re=0;
while (re!=1)
{
printf("请输入要查找的元素的值\n");
scanf("%d",&Vol);
re=Locate(&L,Vol);
}
break;
case 4:
printf("请输入要获取的元素的位置\n");
flag = 0;
while (flag==0)
{
scanf("%d",&Vol);
if(Vol<1||Vol>L.length)
printf("错误,请重新输入\n");
else
{
GetElem(&L,Vol,&y);
flag=1;
}
}
break;
case 5:
Vol=GetLength(&L);
printf("长度为%d\n",Vol);
break;
case 6:
DispList(&L);
break;
case 7:
exit(0);
break;
}
}
}
void InitList(list *L)
{
L->length=0;
}
int GetLength(list *L)
{
return L->length;
}
void GetElem(list *L,int i,int *e)
{
*e=L->data[i-1];
printf("第%d个元素是%d\n",i,*e);
}
int Locate(list *L,int x)
{
int i,j=0;
for (i=0;ilength;i++)
{
if (L->data==x)
{
printf("%d是第%d个元素\n",x,i+1);
j=1;
}
}
if(j==1)
{
return 1;
}
else
{
printf("输入有误\n");
return 0;
}
}
void InsElem(list *L,int x,int i)
{
int j;
for(j=L->length;j>=i;j--)
{
L->data[j]=L->data[j-1];
}
L->data[i-1]=x;
(L->length)++;
printf("添加完毕\n");
}
void DelElem(list *L,int i)
{
int j;
for(j=i-1;j<(L->length)-1;j++)
{
L->data[j]=L->data[j+1];
}
(L->length)--;
printf("删除完毕\n");
}
void DispList(list *L)
{
int i;
printf("顺序表是:\n");
for (i=0;ilength;i++)
{
printf("%d ",L->data);
}
printf("\n");
}[/code]
hxlou_520 2008-9-25 15:48
回复 1# 的帖子
現在還不能完全看懂,不過會好好努力的