c语言编程-字符线性表基本功能的实现与应用
清华大学出版社大学计算机基础实验指导书中有可以实现整数线性表的代码,若要实现字符线性表,思路基本不变,对某些定义部分做出相应改动即可,代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define MAX 100
typedef char DataType;
typedef struct
{
int n; //表长
int data[MAX]; //预设线性表的储存空间
} ListType;
void Initiate(ListType*L) //将线性表表长置为0
{
L->n=0;
}
void Show(ListType L) //输出线性表
{
int i;
for(i=0;i<L.n;i++)
printf("%c",L.data[i]);
printf("\n");
}
int Locate(ListType L,char x) //查找元素x,找到则返回下标值,否则返回-1
{
int i;
for (i=0;i<L.n;i++)
if (L.data[i]==x)
return i;
return -1;
}
void Insert(ListType*L,int i,char x) //线性表验满并实现输入、插入
{
if(L->n==MAX)
{
printf("线性表空间已满,不能进行插入操作,按任意键返回。");
system("pause");
return;
}
if(i<0||i>L->n)
{
printf("插入的位置不正确,按任意键返回。");
system("pause");
return;
}
int j=L->n;
while(j>i)
{
L->data[j]=L->data[j-1];
j--;
}
L->data[i]=x;
L->n++;
}
void Delete(ListType*L,int i) //删除元素
{
if(L->n==0)
{
printf("这是空表,无法删除元素,按任意键返回。");
system("pause");
return;
}
if(i<0||i>=L->n)
{
printf("删除位置不正确,按任意键返回。");
system("pause");
return;
}
while(i<L->n-1)
{
L->data[i]=L->data[i+1];
i++;
}
L->n--;
}
int Getdata(ListType L,int i,char *x) //查找元素
{
int flag=0;
if(i>=0&&i<L.n)
{
*x=L.data[i];
flag=1;
}
return flag;
}
int Priordata(ListType L,int i,char *x) //查找前驱
{
int flag=0;
if (i>0&&i<L.n)
{
*x=L.data[i-1];
flag=1;
}
return flag;
}
int Nextdata(ListType L,int i,char *x) //查找后继
{
int flag=0;
if (i>0&&i<L.n)
{
*x=L.data[i+1];
flag=1;
}
return flag;
}
int main()
{
ListType L; //定义线性表L
Initiate(&L); //初始化线性表
int i=0;
char ch;
while((ch=getchar())!='\n') //利用循环和insert函数输入元素
{
Insert(&L,i,ch);
i++;
}
Show(L);
printf("%d\n",L.n);
scanf("%c",&ch);
int k;
while((k=Locate(L,ch))!=-1) //利用循环和delete函数重复删除某一个元素
{
Delete(&L,k);
}
Show(L);
printf("%d\n",L.n);
}