查看完整版本: 数据结构之实例

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]

替身 2008-9-22 15:45

顶一下  虽然目前还不是太明白

hxlou_520 2008-9-25 15:48

回复 1# 的帖子

現在還不能完全看懂,不過會好好努力的

qlf0702 2008-11-7 19:58

:_007 :_003 删除时好像不对啊,
页: [1]
查看完整版本: 数据结构之实例