鱼C论坛

 找回密码
 立即注册
查看: 3059|回复: 2

[技术交流] 静态线性表 练习作业

[复制链接]
发表于 2013-5-16 21:53:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>
#define M 1000

typedef struct
{
        int data;
        int youbiao;
}jie,biao[M];

void chushihua(biao x);                //初始化静态表
void shuru(biao x);                       //输入数据
void shuchu(biao x);                    //遍历输出
int weizhi(biao x);                         //要插入的位置
void charu(biao x,int i,int n);        //插入数据
int changdu(biao x);                    //静态表的长度
void shanchu(biao x,int i);           //删除指定的成员
void beiyong(biao x,int i);           //把删除的成员连接到备用链表里


void main()
{

          jie j[M];
          int i,n,x;

          chushihua(j);
          shuru(j);
          shuchu(j);
          printf("请输入要插入的位置:");
          scanf("%d",&i);
          printf("请输入要插入的数据:");
          scanf("%d",&n);
          charu(j,i,n);
          shuchu(j);
          printf("请输入要删除第几个成员:");
          scanf("%d",&x);
          shanchu(j,x);
          shuchu(j);

}

void chushihua(biao x)           //初始化静态表
{
           int i;

           for(i=0; i<M-1; i++)
           {
                 x[i].youbiao =i+1;
           }
           x[M-1].youbiao =0;
}

void shuru(biao x)           //输入数据
{
     int i,n;

         printf("请问你要插入几个数据\n");
         scanf("%d",&n);

         x[M-1].youbiao =1;
         for(i=1; i<=n; i++)
         {
                 printf("第%d个数据是:",i);
                 scanf("%d",&x[i].data );
         }
         x[0].youbiao =i+1;

}

void shuchu(biao x)              //遍历输出
{
          int i=1,xiabiao;
          printf("\n");
          xiabiao=M-1;
          
          while(i != x[0].youbiao-1)
          {
                        xiabiao=x[xiabiao].youbiao;
                        printf("第%d个数据是:%d\n",i,x[xiabiao].data );
                        i++;
          }
         printf("\n");
}

void charu(biao x,int i,int n)   //插入数据
{
         int j,wei,tou;

          tou=M-1;

          if(i<1 || i>changdu(x)+1)
          {
                   printf("要插入的数据不在范围内\n\n");
                   exit(-1);
          }
          wei=weizhi(x);
          x[wei].data =n;

          for(j=1; j<=i-1; j++)
          {
                    tou=x[tou].youbiao ;  
          }
          x[wei].youbiao = x[tou].youbiao;
          x[tou].youbiao = wei;
          
          printf("插入数据成功\n\n");
}

int weizhi(biao x)          //要插入的位置
{
         int i;

         i=x[0].youbiao ;
         if(x[0].youbiao)
            x[0].youbiao =x[i].youbiao ;

         return i;
}

int changdu(biao x)         //静态表的长度
{
         int i=1,xiabiao=x[M-1].youbiao;

         if(x[M-1].youbiao ==0)
         {
                 return 0;
         }
     else
         {
               while(i != x[0].youbiao-1)
                   {
                            i++;
                            xiabiao=x[xiabiao].youbiao;
                       
                   }
               return i-1;          
         }

}

void shanchu(biao x,int i)       //删除指定的成员
{
         int tou,j,h;

         if(i<1 || i>changdu(x))
          {
                   printf("要删除的数据不在范围内\n\n");
                   exit(-1);
          }
          tou=M-1;
          for(j=1; j<=i-1; j++)
          {
                   tou=x[tou].youbiao ;
          }
          h=x[tou].youbiao ;
          x[tou].youbiao =x[h].youbiao;
          beiyong(x,h);
}

void beiyong(biao x,int i)       //把删除的成员连接到备用链表里
{
          x[i].youbiao = x[0].youbiao ;
          x[0].youbiao =i;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-26 13:56:48 | 显示全部楼层
我只是路过打酱油的。向你学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-27 13:40:24 | 显示全部楼层
感恩无私的分享与奉献 :)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 00:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表