您的位置:首页 > 理论基础 > 数据结构算法

数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月

2017-10-20 21:16 981 查看
#include <stdio.h>
#include <conio.h> //conio是Console Input / Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,

//主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。

#define MAX 30    //定义线性表的最大长度

enum BOOL{False,True};  //定义BOOL型

typedef struct{

   int elem[MAX];       //int数组类型的线性表

   int length;             //length指示当前线性表的长度

}sqlist; //sqlist是struct的别名。

void initial(sqlist &);    //初始化线性表1.

BOOL insert(sqlist &v,int loc,int intt); //在线性表中插入元素 (引用线性表,位置,int型变量)2.

BOOL del(sqlist &,int weizhi,int &);   //在线性表中删除元素 (引用线性表,位置,返回该位置被删除元素的元素值)3.

//1.2.3.都需要对线性表进行操作,所以是对线性表的引用。&。

int locate(sqlist,int elem);        //在线性表中定位元素(线性表,需要被查找的元素)

void print(sqlist);             //显示线性表中所有元素(打印出线性表中所有元素)

void main()//(主函数)

{
sqlist S;      //S为一线性表(创建一个名叫S的顺序表结构体对象。)
int loc,flag=1;
//定义整型位置变量,和标记变量(标记变量的作用之后用于进入while循环)
char j;
//用于之后swich来选择条件的一个字符。
int intt;
//(要插入的int型变量元素)
BOOL temp;
//(temp用来记录插入,删除函数是否成功插入的返回值)
printf("本程序用来实现顺序结构的线性表。\n");
printf("可以实现查找、插入、删除等操作。\n");

initial(S);         //初始化线性表(调用之后的函数进行初始化。)

while(flag)
{
printf("请选择:\n");
printf("1.显示所有元素\n");
printf("2.插入一个元素\n");
printf("3.删除一个元素\n");
printf("4.查找一个元素\n");
printf("5.退出程序    \n");

scanf(" %c",&j);
switch (j)
{
case '1':print(S); break; //显示所有元素
case '2':
{
printf("请输入要插入的元素(一个字符)和插入位置:\n");
printf("格式:字符,位置;例如:a,2\n");

scanf(" %d,%d", &intt, &loc);  //输入要插入的元素和插入的位置

temp = insert(S, loc, intt);     //插入

if (temp == False)
printf("插入失败!\n");  //插入失败
else
{
printf("插入成功!\n");
print(S);
} //插入成功
break;
}
case '3':{printf("请输入要删除元素的位置:");
scanf("%d", &loc);    //输入要删除的元素的位置

temp = del(S, loc, intt);  //删除(引用线性表,位置,返回该位置被删除元素的元素值)

if (temp == True)
printf("删除了一个元素:%d\n", intt); //删除成功
else 
printf("该元素不存在!\n");  //删除失败
print(S);
break;
case '4':{
printf("请输入要查找的元素:");
scanf(" %d", &intt);      //输入要查找的元素

loc = locate(S, intt);      //定位

if (loc != -1) 
printf("该元素所在位置:%d\n", loc + 1); //显示该元素位置
else   
printf("%d 不存在!\n", intt);//当前元素不存在
break;
}
case '5':{
flag = 0;
printf("程序结束,按任意键退出!\n"); }
}
}
getch();
}

}

void initial(sqlist &v)

{
//初始化线性表
int i;
printf("请输入初始线性表长度:n="); //输入线性表初始化时的长度
scanf("%d",&v.length);
printf("请输入从1到%d的各元素(整型),例如:1 2 3 4\n",v.length);
getchar();
for(i=0;i<v.length;i++) 
scanf("%d",&v.elem[i]); //输入线性表的各元素

}

BOOL insert(sqlist &v,int loc,int intt)        

{
//插入一个元素,成功返回True,失败返回False
int i;
if((loc<1)||(loc>v.length+1))
{
printf("插入位置不合理!\n");  //位置不合理
return False;
}
else if(v.length>=MAX)         //线性表已满
{
printf("线性表已满!\n");
return False;
}
else 
{
for(i=v.length-1;i>=loc-1;i--) 
v.elem[i+1]=v.elem[i];
//其后元素依次后移
v.elem[loc-1]=intt;     //插入元素
v.length++;                      //线性表长度加一
return True;

    }

}

BOOL del(sqlist &v,int loc,int &intt)           

{
//删除一个元素,成功返回True,并用ch返回该元素值,失败返回False
int j;
if(loc<1||loc>v.length)    //删除位置不合理
return False;
else {
intt=v.elem[loc-1];  //ch取得该元素值
for(j=loc-1;j<v.length-1;j++)
v.elem[j]=v.elem[j+1];   //其后元素依次前移
v.length--;       //线性表长度减一
return True;
}

}

int locate(sqlist v,int intt)

{
//在线性表中查找int元素的位置,成功返回其位置,失败返回-1
int i=0;
while(i<v.length && v.elem[i]!=intt)
++i;  //当前位置后移,直到找到为止
if(v.elem[i]==intt)               //找到当前元素
return i;
else  return(-1);

}

void print(sqlist v)          //显示当前线性表所有元素

{
int i;
for(i=0;i<v.length;i++)
printf("%d ",v.elem[i]);
printf("\n");

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