指尖上的代码[C语言版]-<6>数据结构之顺序表

来源:互联网 发布:网络摄像机有什么用 编辑:程序博客网 时间:2024/04/29 01:31

<6> 数据结构---线性表的顺序存储结构

分析:

代码:

#include "stdio.h"#include "stdlib.h"#define M 20        /*自定义数组大小*/#define Type  "%d"typedef int DataType;  /*为现有类型创建同义词,自己可更改数据类型*/typedef struct             {                DataType array[M];   /*数组*/                int subscript;      /*数组最后一个元素的下标*/             } sequencetable;   /*自定义数据类型sequenacetable*/sequencetable *s;  /*定义sequencetable类型的指针变量s*/int flag=0;   /*用来标示数组是否初始化了*//*函数声明*/void Initialization();void Print();void Insert();void Delete();int main(void){   int options;   printf("数据结构>>线性表的顺序存储结构\n");   printf("1.初始化顺序表\n");   printf("2.浏览顺序表\n");   printf("3.按位置插入元素\n");   printf("4.按位置删除元素\n");   printf("5.退出\n");   while(1)       {          printf("请选择您要进行的操作:");          scanf("%d",&options);          switch(options)                {                   case 1:Initialization();break;                   case 2:Print();break;                   case 3:Insert();break;                   case 4:Delete();break;                   case 5:free(s);exit(0);break;                   default:printf("请输入数字1-5进行选择!\n");                }       }   return 0;   }void Delete(){  int locate,i;  if(flag==0)    {      printf("请先对顺序表初始化!\n");    }  else    {      if(s->subscript==-1)        {          printf("顺序表里暂时没有数据,不能进行删除操作!\n");        }      else        {          printf("请输入您要删除的元素所在的位置(0<位置<=%d):",s->subscript+1);          scanf("%d",&locate);          if(locate>(s->subscript+1))            {              printf("您要删除的元素不存在!\n");              Delete();            }          else            {              if(locate==s->subscript+1)                {                  s->subscript--;                }              else                {                  for(i=locate;i<=s->subscript;i++)                     {                       s->array[i-1]=s->array[i];                     }                  s->subscript--;                }              printf("元素已成功删除!\n");            }        }    }}void Insert(){  int locate,i;  DataType x;  if(flag==0)    {      printf("请先对顺序表进行初始化!\n");    }  else    {      printf("请输入您想要要插入的位置(1-%d):",M);      scanf("%d",&locate);      if(locate<=0||locate>M)        {          printf("您输入的位置不在1-%d之间,请重新输入!\n",M);          Insert();        }      else        {          printf("请输入您要插入的元素:");          scanf(Type,&x);          if(s->subscript<locate-1)            {              s->subscript=locate-1;              s->array[s->subscript]=x;            }          else             {              if(s->subscript==M-1)                {                  if(locate==M)                    {                      s->array[s->subscript]=x;                    }                  else                    {                      for(i=s->subscript-1;i>=locate-1;i--)                         {                           s->array[i+1]=s->array[i];                         }                      s->array[locate-1]=x;                    }                }              else                {                  s->subscript++;                  for(i=s->subscript-1;i>=locate-1;i--)                     {                       s->array[i+1]=s->array[i];                     }                  s->array[locate-1]=x;                }            }          printf("元素已成功插入顺序表!\n");        }    }}void Print(){  int i;  if(flag==0)    {       printf("请先对顺序表初始化!\n");    }  else   if(s->subscript==-1)           {              printf("顺序表里暂时没有数据!\n");           }           else           {             for(i=0;i<=s->subscript;i++)               {                 printf(Type,s->array[i]);                 printf("  ");               }               printf("\n");           }}void Initialization(){   s=(sequencetable *)malloc(sizeof(sequencetable)); /*为顺序表申请内存空间*/   s->subscript=-1;   flag=1;   printf("顺序表初始化已完成!\n");}


编译结果:


点石成金  写于  2012/08/12/14:54



原创粉丝点击