线性表顺序结构增删改查

来源:互联网 发布:美即黑面膜怎么样 知乎 编辑:程序博客网 时间:2024/05/29 09:48

  上次的博客我写了对于线性表的两种简单实现,今天我写一下对于线性表顺序结构的增、删、改、查的几种方式的实现。

#include<stdio.h>

char v[30];//上来你要设定一个数组来存储你的数据,这个数组的长度一定要大于你的数据个数。

int n;

void build();//声明两个函数一个是创建这个数组来存储数据

void display();//声明输出函数

void main()//主函数

{

    

    n=26;

    build();

    display();

   

}

 

    void build()//构造字母表

    {

        int i;

        v[0]='a';//给数组的第一个元素赋值

        for(i=1;i<n;i++)用循环来给剩下的数组依次赋值

        {

        v[i]=v[i-1]+1;

        }

    }

    void display()//字母表的显示

    {

        int i;

        for(i=0;i<30;i++)

        {

        printf("%c",v[i]);

        }

        printf("\n");

    }

这是上次所编写的程序,我们会在他的基础之上增加四种功能的语句。

void insert()

{

int i,j

char ch

printf“输入你要插入的位置”;

scanf(“%d”,&i);

getchar();

scanf(“%c”,&ch);

forj=0v[j]=NULLj++

{

  int a=0;

  a++;

}

If(a<=30)

{

for(j=a-1;j>=i-1;j++)

{

 v[j+1]=v[j];

}

v[i]=(char)ch;

display();

}

else

 printf(“内存不足无法储存”);

};

void chang()

{

   Int i;

Char ch;

   printf(“你要更改第几个数据”);

   scanf(“%d”,&i);

   getchar();

   printf(“请输入更改之后的数据”);

   Scanf(“%c”,&ch);

  forj=0v[j]=NULLj++

{

  int a=0;

  a++;

}

If(a<=30)

{

V[i-1]=(char)ch;

display();

}

else

 printf(“内存不足无法储存”);

}   

};

Void delete();

{

  int i;

  Printf(“请输入你要删除的数据”);

  Scanf(“%d”,&i);

  Getchar();

forj=0v[j]=NULLj++

{

  int a=0;

  a++;

}

If(a<=30)

{

for(j=a-1;j>=i-1;j++)

{

v[j]= v[j+1];

}

Display();

 

}

我相信大部分人看了这个程序都是可以理解的,并不是很难。大多数人没有写出来的原因是因为,没有想好怎么去实现这些功能。c语言基础很差是一个很大的问题。对于数据结构的学习,必须要精通一门语言,无论哪一门并没有具体要求。

  这个程序可能很多人不理解,为什么要在所有的  Scanf(“%d”,&i);

后边加了一个getchar

 

  这是不输入getchar的程序。在这里我简单解释一下,对于%d这个取值来说,他是不取回车键的,也就是说,当你在取%d的时候如果你输入回车他就会自动停止,但是对于%c来说,回车对他来说就是一个普通的字符,他就会记录到其中,也就是说如果不加入getchar这个语句。回车就会被%c所吸取,%c中的值就是回车。随意就会出现上述的情况。所以就需要一个getchar来专门吸收回车一个多余的数值。


为了方便大家看清我将更改的增加的都设定为数字,这样方便大家来看。





#include<stdio.h>
char v[30];
int n;
void build();//声明
void display();
void change();
void insert();
void Delete();
void main(void)
{


n = 26;
build();
display();
insert();
change();
Delete();
}


void build()//构造字母表
{
int i;
v[0] = 'a';
for (i = 1; i<n; i++)
{
v[i] = v[i - 1] + 1;
}
}
void display()//字母表的显示
{
int i;
for (i = 0; i<30; i++)
{
printf("%c", v[i]);
}
printf("\n");
}
void insert()//插入字母
{
int i, j = 0, a = 0;
char ch;
printf("请输入要插入的位置:");
scanf("%d", &i);
printf("请输入新元素:");
getchar();
scanf("%c", &ch);
for (j = 0; v[j] != NULL; j++)//计算数组用了多少空间
{
++a;
}
for (j = a - 1; j >= i - 1; j--)
{
v[j + 1] = v[j];
}
v[i] = (char)ch;
display();
}
void change()//修改字母
{
int i, j = 0, a = 0;
char ch;
printf("请输入要修改的位置:");
scanf("%d", &i);
getchar();
printf("请输入修改后的元素:");
scanf("%c", &ch);
for (j = 0; v[j] != NULL; j++)//计算数组用了多少空间
{
a++;
}
if (i>a || i <= 0)
{
printf("输入超限!");
return;
}
else
{
v[i - 1] = ch;
}


//打印
display();
}
void Delete()//删除字母
{
int i, j = 0, a = 0;
char ch;
printf("请输入要删除的位置:");
scanf("%d", &i);
for (j = 0; v[j] != NULL; j++)//计算数组用了多少
{
a++;
}
for (j = i - 1; j + 1 <= a; j++)
{
v[j] = v[j + 1];
}
//打印
display();
}