#include <iostream>
using namespace std;
#define MAXLEN 30//数组最大值
typedef char Datatype;
typedef struct
{
Datatype data[MAXLEN];//存放字母表的数组
int length;//定义长度
}Seqlist;//字母表
Seqlist alphabet;
void Init(Seqlist *alphabet)//初始化,将线性表的指针传入
{
alphabet->length=0;//将长度置为0
}
void Creat(Seqlist *alphabet,char n)//创建字母表函数,输入字母
{
int i;
printf("请输入26个字母");
for(i=0;i<26;i++)
{
scanf("%c",&alphabet->data[i]);//将输入的字母存入数组
alphabet->length++;//更新长度
if(i==26)
break;
}
}
int Insert(Seqlist *alphabet,int i,Datatype x)//插入函数,插入位置i,插入字母x
{
int j;
if(alphabet->length>=MAXLEN)//判断当前长度是否超过最大长度
{
printf("顺序表已满");
return -1;
}
if(i<1 || i>alphabet->length+1)
{
printf("插入位置有误");
return 0;
}
if (i == alphabet->length+1)
{
alphabet->data[i-1]=x;
alphabet->length++;
return 1;
}
else
{
int j;
for(j=i;j<=alphabet->length;j++){
alphabet->data[j-1]=alphabet->data[j];
}
alphabet->length--;
}
}
int Delete(Seqlist *alphabet,int i)//删除函数,删除位置i
{
int j;
if(alphabet->length==0)//表为空 没有元素可以删除
{
printf("表为空");
return 0;
}
if(i<1 || i>alphabet->length+1)
{
printf("删除位置有误");
return 0;
}
else
{
for(j=i;j<alphabet->length;j++)//从第i个位置开始往前挪
{
alphabet->data[j-1]=alphabet->data[j];//将元素往前挪一个位置
}
alphabet->length--;//长度减一
return 1;
}
}
void Display(Seqlist *alphabet)//显示字母表
{
for(int i=0;i<=alphabet->length;i++)
{
printf("%c",alphabet->data[i]);
}
printf("\n");
}
int main(){
int i,k;
Datatype x;
int temp = 1;
Seqlist alphabet;
Init(&alphabet);
int choice;
//s = Make();
while(temp)
{
printf("======字母表操作演示=======\n");
printf("1. 创建字母表\n");
printf("2. 向指定位置插入指定数据\n");//插入
printf("3. 删除顺序表指定位置的数据\n");//删除
printf("4. 输出字母表\n");//输出
printf("===========================\n");
printf("\n输入1-4,选择所需功能号:");
scanf("%d", &choice);
printf("\n您选择的功能号为:%d\n", choice);
switch(choice)
{
case 1://创建与输入
Init(&alphabet);
Creat(&alphabet,x);
printf("当前字母表为:");
Display(&alphabet);
system("pause");
getchar();
break;
case 2://在指定位置插入
printf("请输入要插入的位置:");
scanf("%d",&i);
printf("请输入要插入的元素:\n");
scanf("%c",&x);
Insert(&alphabet,i,x);
printf("成功插入元素\n");
/*
if(Insert(&alphabet,i,x))
{
printf("成功插入元素\n");
}
*/
system("pause");
break;
case 3://删除指定位置的字母
printf("请输入要删除元素的位置");
scanf("%d",&i);//输入位置
if(Delete(&alphabet,i))//传入线性表,输入位置
{
printf("删除成功,当前字母表为:\n");
Display(&alphabet);
}
else
printf("\n输入删除的参数错误");\
system("pause");
break;
case 4://输出字母表
Display(&alphabet);
break;
}
}
return 0;
}
if(i==26)
break;
这是垃圾代码啊。怎么可能执行到呢
for(j=i;jlength;j++)//从第i个位置开始往前挪
{
alphabet->data[j-1]=alphabet->data[j];//将元素往前挪一个位置
改为:
for(j=i;jlength-1;j++)//从第i个位置开始往前挪
{
alphabet->data[j]=alphabet->data[j+1];//将元素往前挪一个位置