您的位置:首页 > 编程语言 > C语言/C++

指尖上的代码[C语言版]-<6>

2012-08-12 14:50 281 查看
<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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: