顺序表是一种最基本、最简单、也是最常用的数据结构,下面的程序演示了对顺序表的基本操作。
#include <stdio.h>
#include <stdlib.h>
#define LIST_INTSIZE 50
typedef char DataType;
typedef struct
{
DataType* elem; //顺序表的基地址
int length; //顺序表当前长度
int listsize; //顺序表当前分配的存储容量
}SeqList;
int InitSeqList(SeqList* L) //初始化顺序表
{
L->elem=(DataType *)malloc((LIST_INTSIZE+1)*sizeof(DataType));
if (L->elem==NULL)
{
printf("\t\t\t内存分配错误\n");
return 0;
}
L->length=0;
L->listsize=LIST_INTSIZE;
printf("\t\t\t内存分配成功");
return 1;
}
int InsertSeqList(SeqList* L,int i,DataType x) //对顺序表进行插入操作,插入格式如(1,a)
{
int j;
if (L->length==L->listsize)
{
printf("\t\t\t顺序表已满");
return 0;
}
else
{
if (i<1||i>L->length+1)
{
printf("\t\t\t位置不合法");
return 0;
}
else
{
for(j=L->length;j>=i;j--)
{
L->elem[j+1]=L->elem[j];
}
L->elem[i]=x;
L->length++;
return 1;
}
}
}
int DeleteSeqList(SeqList* L,int i) //对顺序表进行删除操作
{
int j;
if (i<1||i>L->length)
{
printf("\t\t\t不存在第i个元素");
return 0;
}
else
{
for (j=i;j<L->length;j++)
{
L->elem[j]=L->elem[j+1];
}
L->length--;
return 1;
}
}
int LenSeqList(SeqList* L) //求顺序表表长
{
int n=0;
int i=1;
for (i=1;i<=L->length;i++)
{
n++;
}
return n;
}
int SearchSeqList(SeqList* L,DataType x) //按值查找
{
int j=1;
while (j<=L->length && L->elem[j]!=x)
j++;
if(j>L->length)
{
printf("\t\t\t找不到你要的值,请重新输入");
return (0);
}
else
return j;
}
DataType GetfromSeqList(SeqList* L,int i) //按位置查找
{
DataType x;
if(i<1||i>L->length)
{
printf("\t\t\t查找位置不合法");
return 0;
}
else
{
x=L->elem[i];
return x;
}
}
void ShowSeqList(SeqList* L) //显示顺序表
{
int i;
printf("\n\t\t\t显示线性表的所有元素: ");
if (L->length==0)
{
printf("\n\t\t\t链表为空");
}
else
{
printf("\n\t\t\t");
for(i=1;i<=L->length;i++)
{
printf("\t%c",L->elem[i]);
}
}
}
main()
{
int choice;
int i,n=0;
int j=1;
SeqList L;
DataType x;
while(j)
{
printf("\n\n\n\n");
printf("\t\t\t--线性顺序表--\n");
printf("\n\t\t\t*****************************************");
printf("\n\t\t\t* 1-----顺序表初始化 **");
printf("\n\t\t\t* 2-----插 入 **");
printf("\n\t\t\t* 3-----删 除 **");
printf("\n\t\t\t* 4-----求 表 长 **");
printf("\n\t\t\t* 5-----按 值 查 找 **");
printf("\n\t\t\t* 6-----读 取 元素值 **");
printf("\n\t\t\t* 7-----显 示 线性表 **");
printf("\n\t\t\t* 0-----退 出 **");
printf("\n\t\t\t*****************************************\n");
printf("\t\t\t请选择菜单号(0--7): ");
scanf("%d",&choice);getchar();
if(choice==1)
{
InitSeqList(&L);
}
else if(choice==2)
{
printf("\n\t\t\t请输入位置i和数值x(输入格式: i,x):");
scanf("%d,%c",&i,&x);
InsertSeqList(&L,i,x);
}
else if(choice==3)
{
printf("\n\t\t\t请输入要删除元素的位置i(输入格式:i)");
scanf("%d",&i);
DeleteSeqList(&L,i);
printf("\n\t\t\t删除成功");
}
else if(choice==4)
{
n=LenSeqList(&L);
printf("\n\t\t\t线性表的表长为:%d",n);
}
else if(choice==5)
{
printf("\n\t\t\t请输入要查找的值x(输入格式:x):");
scanf("%c",&x);
i=SearchSeqList(&L,x);
printf("\n\t\t\t你查找值的位置为:%d",i);
}
else if(choice==6)
{
printf("\n\t\t\t请输入要查找的位置i(输入格式:i):");
scanf("%d",&i);
x=GetfromSeqList(&L,i);
printf("\n\t\t\t你查找的值为:%c",x);
}
else if(choice==7)
{
ShowSeqList(&L);
}
else if(choice==0)
{
j=0;
printf("\t\t\t程序结束!\n");
}
else printf("\n\t\t\t输入错误!请重新输入!\n");
}
}