|
三.概要设计:
- 为了实现上述程序功能,需要定义单链表的抽象数据类型:
ADT LinkList {
数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}
数据关系:R={<ai,ai+1>|ai,ai+1
∈D}
基本操作:
creat_list(*L))
操作结果:构造一个长度为n的线性表L,并对应输入元素。.
out_list(L)
初始条件:有一个长度为n的含有具体元素线性表
操作结果:输出一个长度为n的元素并输出各个对应位序上的元素
insert_sq(*L, i, e)
初始条件:表L已存在
操作结果:将元素e插入到表L的i位置
delete_sq(*L, i)
初始条件:表L已存在
操作结果:将表L中i位置的元素删除,元素值置入e中返回
locat_sq(L, e)
初始条件: 表L依存在
操作结果:表L中查找是否元素e,并指明位序i
nixu_sq(*L)
初始条件:表L依存在
操作结果:表L中元素逆序排列
} ADT LinkList
2) 本程序包含7个函数:
- 主函数main()
- 建立线性表creat_list()
- 输出线性表out_list()
- 插入元素函数insert_sq()
- 删除元素函数delete_sq()
- 查找元素函数locat_sq()
- 逆序输出元素nixu_sq()
- 各函数间关系如下:
|
|
九.附录:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{ElemType a[MAXSIZE];
int length;
}SqList;
SqList a,b,c;
void creat_list(SqList *L);
void out_list(SqList L);
void insert_sq(SqList *L,int i,ElemType e);
void nixu_sq(SqList *L);
ElemType delete_sq(SqList *L,int i);
int locat_sq(SqList L,ElemType e);
void main()
{int i,k,loc;ElemType e,x;char ch;
do{printf("\n\n\n");
printf("\n 1.建立线性表");
printf("\n 2.插入元素");
printf("\n 3.删除元素");
printf("\n 4.查找元素");
printf("\n 5.逆序输出元素");
printf("\n 0.结束程序运行");
printf("\n ===========================================");
printf("\n 请输入您的选择(1,2,3,4,5,0)");
scanf("%d",&k);
switch(k)
{case 1:{creat_list(&a);
out_list(a);
}break;
case
2:{printf("\n请输入插入位置(大于等于1,小于等于%d):",a.length+1);
scanf("%d",&i);
printf("\n请输入要插入的元素:");
scanf("%d",&e);
insert_sq(&a,i,e);
out_list(a);
}break;
case 3:{printf("\n请输入删除元素位置(大于等于1,小于等于%d):",a.length);
scanf("%d",&i);
x=delete_sq(&a,i);
if(x!=-1)
printf("\n删除的元素为:%d\n",x);
else printf("要删除的元素不存在!");
}break;
case
4:{printf("\n请输入要查找的元素值:");
scanf("%d",&e);
loc=locat_sq(a,e);
if(loc==-1)
printf("\n未找到指定元素!");
else printf("\n已找到,元素位置是%d",loc);
}break;
case 5:{printf("\n逆序输出元素:");
nixu_sq(&a);
out_list(a);
}break;
}
}while(k!=0);
printf("\n 按回车键,返回...\n");
ch=getchar();
}
void creat_list(SqList *L)
{int i;
printf("请输入线性表的长度:");
scanf("%d",&L->length);
for(i=0;i<L->length;i++)
{printf("%d=",i);
scanf("%d",&(L->a[i]));
}
}
void out_list(SqList L)
{int i;
for(i=0;i<=L.length-1;i++)
printf("d",L.a[i]);
}
void insert_sq(SqList *L,int i,ElemType e)
{int j;
if(L->length==MAXSIZE) printf("线性表已满!\n");
else
if(i<1||i>L->length+1)
printf("请输入位置错误!\n");
else{for(j=L->length-1;j>=i-1;j--)L->a[j+1]=L->a[j];
L->a[i-1]=e;
L->length++;
}
}
ElemType delete_sq(SqList *L,int i)
{ElemType x;
int j;
if(L->length==0)
printf("空表!\n");
else
if(i<1||i>L->length+1){printf("输入位置错!\n");
x=-1;
}
else{x=L->a[i-1];
for(j=i;j<=L->length-1;j++)L->a[j-1]=L->a[j];
L->length--;
}
return(x);
}
int locat_sq(SqList L,ElemType e)
{int i=0;
while(i<=L.length-1&&L.a[i]!=e)i++;
if(i<=L.length-1)return(i+1);
else return(-1);
}
void nixu_sq(SqList *L){
int i,item;
for(i=0;i<L->length/2;i++){
item=L->a[i];
L->a[i]=L->a[L->length-i-1];
L->a[L->length-i-1]=item;
}
}
|