数据结构实训一(顺序表)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("删除后的顺序表为:");
//顺序表长度减一
List->length--;
Display(*List);
}
else
printf("删除失败,该顺序表中不含有元素%d ...\n",element);
getch();
}
//简单选择排序
void SimpleSort(SeqList List)
printf("\t\t 5:删除\t");
printf("\t\t6:简单选择排序\n");
printf("\t\t 7:快速排序\t");
printf("\t\t 8:折半查找\n");
printf("\t\t 9:逆置线性表\t");
printf("\t\t 10:直接插入排序\n");
printf("\t\t 11:冒泡排序\t");
}
srand(seed);
//初始化数据和长度
for(int i=0;i<length;i++)
List->data[i]=rand()%90+10;
for(int j=length;j<MAXSIZE;j++)
List->data[j]=0;
List->length=length;
printf("初始化成功...\n");
void QuickSort(SeqList *List,int left,int right);//快速排序
void BinarySearch(SeqList List);//折半查找
void Inveser(SeqList List);//逆置顺序表
void InsertSort(SeqList List);//直接插入排序
min=j;
jCount++;
}
if(min!=i)
{
List.data[i]=List.data[i]+List.data[min];
List.data[min]=List.data[i]-List.data[min];
List.data[i]=List.data[i]-List.data[min];
}
iCount++;
}
printf("简单选择排序共移动:%d次,比较了:%d次...\n",iCount+jCount,jCount);
printf("排序后:");
Display(List);
getch();
}
//分割数据将无序数列首项中间(左小-首项-右大)位置
int Partition(SeqList *List,int left,int right)
void BubbleSort(SeqList List);//冒泡排序
void OrderInsert(SeqList *List);//有序插入
void DeleteBetweenXY(SeqList *List);//删除介于X和Y之间的值
void MergeList(SeqList *List_1,SeqList *List_2,SeqList *List_3);//合并顺序表
break;
case 12:
OrderInsert(&List);
break;
case 13:
DeleteBetweenXY(&List);
break;
case 14:
MergeList(&List_1,&List_2,&List_3);
break;
case 15:
SplitList(&List_1,&List_2,&List_3);
printf("\t\t------------------------------------------------\n");
printf("\t\t 1:初始化\t");
printf("\t\t 2:显示\n");
printf("\t\t 3:插入\t");
printf("\t\t 4:查找\n");
数据结构实训一(顺序表)
#include<stdio.h>
#include<conio.h>//包含getch()函数
#include<stdlib.h>
#define MAXSIZE 1000
//定义顺序表类型
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
printf("整个查找过程共移动了%d次\n",i);
if(i<List.length)
{
printf("查找成功...\n");
printf("元素%d在顺序表中的位置是:%d",element,i);
}
else
{
printf("查找失败...\n");
printf("在该顺序表中未找到元素%d ...\n",element);
}
//初始化
void InitList(SeqList *List)
{
int length,seed;
printf("请输入元素个数(0-%d):",MAXSIZE);
while(1)
{
scanf("%d",&length);
if(length>=0 && length<=MAXSIZE)
break;
getch();
}
//显示函数
void Display(SeqList List)
{
for(int i=0;i<List.length;i++)
printf("%d ",List.data[i]);
printf("\n");
}
//插入函数
void Insert(SeqList *List)
{
int location,element;
void HeapSort(SeqList List);//堆排序
void main()
{
int myChoice;
SeqList List;
SeqList List_1;
SeqList List_2;
SeqList List_3;
while(1)
{
system("cls");
myChoice=InputChoice();
void SplitList(SeqList *List_1,SeqList *List_2,SeqList *List_3);//拆分顺序表
void ShellSort(SeqList List);//希尔排序
void HeapAdjust(SeqList *List,int root,int length);//建立大顶堆
printf("排序后:");
Display(List);
getch();
break;
case 8:
BinarySearch(List);
break;
case 9:
Inveser(List);
break;
case 10:
InsertSort(List);
break;
case 11:
BubbleSort(List);
else
printf("您的输入不合法,请重新输入->:");
}
printf("请输入随机数种子(0-32767):");
while(1)
{
scanf("%d",&seed);
if(seed>=0 && seed<=32767)
break;
else
printf("您的输入不合法,请重新输入->:");
List->data[i]=List->data[i-1];
List->data[location-1]=element;
printf("元素%d插入%d位置成功...\n",element,location);
printf("插入后顺序表为:");
Display(*List);
getch();
}
}
break;
printf("本次删除共比较%d次,移动%d次...\n",i,List->length-i);
if(i<List->length)
{
for(j=i;j<List->length;j++)
List->data[j-1]=List->data[j];
printf("删除成功...\n");
{
int i,j,min;
int iCount=0,jCount=0;
printf("排序前:");
Display(List);
for(i=0;i<List.length-1;i++)
{
min=i;
for(j=i+1;j<List.length;j++)
{
if(List.data[j]<List.data[min])
switch(myChoice)
{
case 0:
exit(0);
break;
case 1:
InitList(&List);
break;
case 2:
printf("当前顺序表为:");
Display(List);
getch();
break;
case 3:
Insert(&List);
break;
case 4:
int length;
}SeqList;//给顺序表类型起一个别名SeqList;
//定义接口
int InputChoice();//选择函数
void InitList(SeqList *List);//初始化顺序表
void Display(SeqList List);//显示函数
void Insert(SeqList *List);//插入函数
printf("\t\t 0:退出\n");
printf("\t\t------------------------------------------------\n");
printf("\t\t\t请选择:");
scanf("%d",&myChoice);
printf("\n");
return myChoice;
}
getch();
}
//删除函数wenku.baidu.com
void Delete(SeqList *List)
{
int element;
int i=0,j;
printf("请输入要删除的元素:");
scanf("%d",&element);
while(i<List->length)
if(List->data[i++]==element)
printf("当前顺序表为:");
Display(*List);
//判断是否溢出
if(List->length==MAXSIZE)
printf("该顺序表存储空间已满,无法继续插入...\n");
else
{
printf("\n请输入插入位置:");
while(1)
{
scanf("%d",&location);
void Search(SeqList List);//查找函数
void Delete(SeqList *List);//删除函数
void SimpleSort(SeqList List);//简单选择排序
int Partition(SeqList List,int left,int right);//快排分割调整
if(location>0 && location<=List->length)
break;
else
printf("插入位置不合法,请重新输入->:");
}
printf("请输入插入的元素:");
scanf("%d",&element);
List->length++;
for(int i=List->length-1;i>=location;i--)
printf("\t\t 12:有序插入\n");
printf("\t\t 13:删除介于X&Y值之间的数");
printf("\t 14:合并顺序表\n");
printf("\t\t 15:拆分顺序表\t");
printf("\t 16:堆排序\n");
printf("\t\t 17:希尔排序\t");
//查找函数
void Search(SeqList List)
{
ElemType element;
int i=0;
printf("请输入要查找的元素:");
scanf("%d",&element);
while(i<List.length)
if(List.data[i++]==element)
break;
Search(List);
break;
case 5:
Delete(&List);
break;
case 6:
SimpleSort(List);
break;
case 7:
printf("排序前:");
Display(List);
QuickSort(&List,0,List.length-1);
printf("\n快速排序成功!\n由于能力有限,暂无法计算移动和比较次数...\n\n");
break;
case 16:
HeapSort(List);
break;
case 17:
ShellSort(List);
break;
default :
break;
}
}
}
//选择函数
int InputChoice()
{
int myChoice;
printf("\n\n");
printf("\t\t\t\t顺序表操作\n");
相关文档
最新文档