#include<stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define MAX 30
typedef char datatype;//定义datatype数据类型(int型),方便以后修改数据类型
typedef struct //1.声明变量
{
datatype data[MAX];
int last;
}list;
void init(list *l)//2.线性表的初始化
{
l->last=0;//长度为0
}
void insert(list *l,int i,datatype x)//3.实现插入运算
{ //i-插入位置,x-插入数值
int j;
if(l->last==MAX-1)//保证插入的合理性
printf("表满\n");
else if(i<1||i>l->last+1)
printf("位置错误\n");
else //开始实现主要功能
{
for(j=l->last;j>=i;j--)
l->data[j+1]=l->data[j];//将插入位置之后的整体后移一位
l->data[i]=x;//将插入的值给后移后空出的位置
l->last++;//原表长度增加
}
}
void show(list *l)//4.输出
{
int i;
for(i=1;i<=l->last-1;i++)
printf("%c->",l->data[i]);
printf("%c",l->data[l->last]);
}
int length(list *l)//5.求线性表的长度
{
return(l->last);
}
int locate(list *l,datatype x)//6.查找元素
{
int i=l->last;//i的值等于最后一个数值的下标
while(i>0&&l->data[i]!=x) //从最后一个开始循环(不知道循环次数)
i--;
return i;//若返回0,则未找到
}
void delete(list *l,int i)//7.删除
{
int j;
if(i<1||i>l->last)
printf("不存在此元素\n");
else
{
for(j=i+1;jlast;j++)
l->data[j-1]=l->data[j];//将i位置的值覆盖
l->last--;//长度减一
}
}
int main()
{
list l;
int i=1;
datatype ch;//用ch存输入的内容,每次输入数据会被覆盖
int n;//存放位置
char x;
init(&l);//0.初始化函数调用
printf("线性表程序\n");
printf("请输入线性表的元素,以?结束:\n");
ch=getchar();//先接收一个数据 1.输入
while(ch!='?')//通过循环插入数据
{
insert(&l,i,ch);
i++;
ch=getchar();
}
printf("线性表为:");
show(&l); //2.输出
printf("\n线性表的长度为:%d",length(&l));//3.线性表长度
printf("\n请输入要查找的元素值:");//4.查找
rewind(stdin);
scanf("%c",&ch);
printf("元素位置为%d:\n",locate(&l,ch));
printf("请输入插入位置及元素(逗号隔开):");//5.插入
rewind(stdin);
scanf("%d,%c",&n,&ch);
insert(&l,n,ch);
printf("插入后线性表为:\n");
show(&l);
rewind(stdin);
printf("\n请输入要删除元素的位置");//6.删除
scanf("%d",&n);
delete(&l,n);
printf("最终线性表:\n");
show(&l);
}