#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLEN 100 /* MAXSIZE 要大于实际线性表的长度 */
typedef int elementtype; /*根据需要,elementtype也可以定义为其他任何类型*/
typedef struct /*定义线性表*/
{
elementtype s[MAXLEN]; /*定义线性表中元素,MAXLEN-1为线性表的最大容量*/
int len; /*定义线性表的表长*/
}SqList;
//插入
int InsertSqlist(SqList *sql,int i,elementtype x)
{
int j;
if((i<1)||(i>sql->len+1)) /*首先判断插入位置是否合法*/
{
printf("插入位置%d不合法\n",i);
return(0);
}
if(sql->len>=MAXLEN-1)
{
printf("表已满无法插入");
return(0);
}
for(j=sql->len;j>=i;j--)
sql->s[j+1]=sql->s[j]; /*向后移动数据,腾出要插入的空位*/
sql->s[j+1]=x; /*修正插入位置为j+1,将新元素插入到s[j+1]位置*/
(sql->len)++; /*表长加1*/
return(1); /*插入成功,返回值为1*/
}
//删除操作
int DelSqlist(SqList *sql,int i)
{
int j;
if((i<1)||(i>sql->len)) /*首先判断删除位置是否合法*/
{
printf("删除位置%d不合法\n",i);
return(0);
}
for(j=i;j<sql->len;j++)
{
//printf("当前删除的元素是%d\n",sql->s[j]);
//printf("当前删除元素后一个是%d\n",sql->s[j+1]);
sql->s[j]=sql->s[j+1]; /*后面的元素向前移动数据,覆盖要删除的空位*/
}
(sql->len)--; /*表长减1*/
return(1); /*删除成功,返回值为1*/
}
void main()
{
SqList seq;
int p,q,r;
int i,a;
int cycle=1;
//设置颜色
system("color 2F");
while(cycle){
printf("请输入要执行的操作:\n");
printf("\t-----------------------------------------\n");
printf("\t|\t1. 建表 \t\t\t|\n");
printf("\t-----------------------------------------\n");
printf("\t|\t2. 插入 \t\t\t|\n");
printf("\t-----------------------------------------\n");
printf("\t|\t3. 删除 \t\t\t|\n");
printf("\t-----------------------------------------\n");
printf("\t|\t4. 退出 \t\t\t|\n");
printf("\t-----------------------------------------\n");
//choose =getch();
scanf("%d",&a);
switch (a)
{
case 1://建表
system("cls");
printf("请输入线性表的长度:");
scanf("%d",&r);
seq.len =r;
printf("请输入线性表的各元素值:");
for(i=1; i<=seq.len; i++)
/*赋线性表各元素初值,为与前面的概念描述一致,seq.s[0]闲置不用*/
{
scanf("%d",&seq.s[i]);
}
break;
system("pause");
case 2://插入
system("cls");
printf("现在线性表里面数据为:");
for(i=1; i<=seq.len; i++)
{
printf("%d ",seq.s[i]);
}
printf("\n请输入要插入的位置:");
scanf("%d",&p);
printf("请输入要插入的元素值:");
scanf("%d",&q);
InsertSqlist (&seq,p,q); /*调用插入元素的函数*/
printf("插入元素后的线性表:\n");
for(i=1; i<=seq.len; i++)
{
printf("%d ",seq.s[i]);
}
system("pause");
break;
case 3://删除
system("cls");
printf("现在线性表里面数据为:");
for(i=1; i<=seq.len; i++)
{
printf("%d ",seq.s[i]);
}
printf("\n请输入要删除的位置:");
scanf("%d",&p);
//printf("请输入要删除的元素下标:");
//scanf("%d",&q);
DelSqlist (&seq,p); /*调用插入元素的函数*/
printf("删除元素后的线性表:\n");
for(i=1; i<=seq.len; i++)
{
printf("%d ",seq.s[i]);
}
system("pause");
break;
case 4:
cycle=0;
printf("RZH欢迎您再次使用:\n");
break;
default :
printf("输入有误,欢迎您再次使用:\n");
cycle=0;
}
}
}
数据结构——线性表的基本操作(顺序表)
最新推荐文章于 2024-03-06 22:54:40 发布