目录
一、前言
想必我们高校大学生和一些小白在日常学习以及工作当中都会遇到线性表,特别是在学习数据结构和C语言的时候仔细听,但下课还是不懂;不仔细听更是一塌糊涂;下面这些文字及代码就是关于线性表简单的算法,过程就只需要输入一些相关信息,方可出现运算结果,详情如下:
二、线性表是什么?
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
【内容来源:百度百科-线性表(数据结构)线性表_百度百科 (baidu.com)】
三、代码段
代码如下:
#include <stdio.h>
#define MAXLEN 100 /*定义常量MAXLEN为100表示存储空间总量*/
typedef int DataType ; /*定义ElemType为int类型*/
typedef struct /*顺序表存储类型*/
{ DataType data[MAXLEN];
/*存放线性表的数组*/
int Length; /*Length是顺序表的长度*/
}SeqList;
SeqList L;
void InitList( SeqList *L )
{ /*初始化顺序表L函数*/
L->Length=0;
}
void CreateList(SeqList *L,int n)
{
/*建立顺序表并输入多个元素函数*/
int i;
printf("请输入%d个整数:",n);
for(i=0;i<n;i++)
scanf("%d",&L->data[i]);
L->Length=i;
}
int GetElem(SeqList *L,int i,DataType *x)
{
if(i<1 || i>L->Length)
return 0;
else
{*x = L->data[i-1];
return 1;
}
}
int Locate(SeqList *L, DataType x)
{
int i=0;
while(i<L->Length && L->data[i]!=x)
i++;
if(i>=L->Length)
return 0;
else
return i+1;
}
int InsElem(SeqList *L,int i,DataType x)
{
int j;
if (L->Length>=MAXLEN)
{ printf("顺序表已满!");
return -1;
}
if(i<1 || i>L->Length+1)
{ printf("插入位置出错!");
return 0;
}
if(i==L->Length+1)
{ L->data[i-1]=x;
L->Length++;
return 1;
}
for(j=L->Length-1;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->Length++;
return 1;
}
int DelElem(SeqList *L,int i,DataType *x)
{
int j;
if (L->Length==0)
{ printf("顺序表为空!");
return 0;
}
if(i<1 || i>L->Length)
{ printf("不存在第i个元素!");
return 0;
}
*x=L->data[i-1];
for(j=i;j<L->Length;j++)
L->data[j-1]=L->data[j];
L->Length--;
return 1;
}
void DispList(SeqList *L)
{
/*显示输出顺序表L的每个元素函数*/
int i;
for(i=0;i< L->Length;i++)
printf("%5d", L->data[i]);
}
void Menu()
{ /*显示菜单子函数*/
printf("\n 顺序表的各种操作");
printf("\n==================================================");
printf("\n| 1——建立顺序表 |");
printf("\n| 2——插入元素 |");
printf("\n| 3——删除元素 |");
printf("\n| 4——按位置查找元素 |");
printf("\n| 5——按元素值查找其在表中位置 |");
printf("\n| 6——求顺序表的长度 |");
printf("\n| 0——返回 |");
printf("\n==================================================");
printf("\n请输入菜单号(0-6):");
}
main()
{
SeqList L;
DataType x;
int n,i,loc;
char ch1,ch2,a;
ch1='y';
while(ch1=='y'||ch1=='Y')
{ Menu();
scanf("%c",&ch2);
getchar();
switch(ch2)
{
case '1':
InitList(&L);
printf("请输入建立线性表的个数:");
scanf("%d",&n);
CreateList(&L,n);
printf("建立的线性表为:");
DispList(&L);
break;
case '2':
printf("请输入要插入的位置:");
scanf("%d",&i);
printf("请输入要插入的元素值:");
scanf("%d",&x);
if(InsElem(&L,i,x))
{
printf("已成功在第%d的位置上插入%d,插入后的线性表为:\n",i,x);
DispList(&L);
}
else
printf("请输入的参数错误!");
break;
case '3':
printf("请输入要删除元素的位置:");
scanf("%d",&i);
if(DelElem (&L, i, &x))
{
printf("已成功在第%d的位置上删除%d,删除后的线性表为:\n",i,x);
DispList(&L);
}
else
printf("\n输入删除的参数错误!");
break;
case '4':
printf("请输入要查看表中元素位置(从1开始):");
scanf("%d",&i);
if(GetElem(&L, i, &x))
printf("当前线性表第%d个元素的值为:%d",i,x);
else
printf("输入的位置错误!");
break;
case '5':
printf("请输入要查找的元素值为:");
scanf("%d",&x);
loc=Locate(&L, x);
if(loc)
printf("查找元素值为%d的位置为:%d",x,loc);
else
printf("该表中无此元素!");
break;
case '6':
printf("当前线性表的长度为:%d",L.Length);
break;
case '0':
ch1='n';break;
default:
printf("输入有误,请输入0~6进行选择!");
}
if(ch2!='0')
{ printf("\n按回车键继续,按任意键返回主菜单!\n");
a=getchar();
if(a!='\xA')
{
getchar();ch1='n';
}
}
}
}
四、程序运行结果
1.运行示例
2.首先输入需要建立线性表的个数
3. 依次输入3个整数
4. 输入完可以实现线性表的相关功能,如插入元素:
求顺序表的长度:
五、总结
线性表就是需要建立表,然后根据建立的表进行插入、删除,按位置查找元素等功能。
以上为线性表的代码、操作步骤,其中代码是我在上学时跟老师所敲的,这是数据结构教材的典型案例;
另外这个程序还有很多欠缺,由于能力有限没能实现,请见谅!若有侵犯,请联系删除!
文中若有不妥之处请谅解!有不明白的请在评论区问哦
本程序是我在上学期间跟老师所写,若有不妥,请谅解!