数据结构:顺序表
数据结构 顺序
2023-09-27 14:22:47 时间
#include <stdio.h>
#define MAXLEN 100 /*定义常量MAXLEN为
100表示存储空间总量*/
typedef int DataType; /*定义DataType为int类型*/
typedef struct /*顺序表存储类型*/
{ DataType data[MAXLEN]; /*存放线性表的数组*/
int Length; /*Length是顺序表的长度*/
}SeqList;
SeqList L; /*定义一个顺序表L*/
void InitList( SeqList *L )
{ /*初始化顺序表L函数*/
L->Length=0; /*初始化顺序表为空*/
printf("初始化成功!\n\n");
}
void CreateList(SeqList *L,int n)
{ /*建立顺序表并输入多个元素函数*/
int i;
printf("请输入%d个整数:",n);
for(i=0;i<n;i++)
scanf("%d",&L->data[i]);
L->Length=i; /*设线性表的长度为i*/
printf("链表创建成功!\n\n");
}
int GetElem(SeqList *L, int i, DataType *x)
{ /*获取顺序表中第i位中元素函数*/
if (i<1 || i>L->Length) /*当查找位置i不正确时*/
return 0;
else
{ *x = L->data[i-1]; /*将顺序表中第i个元素值赋给指针x所指变量*/
return 1;
}
}
int Locate(SeqList *L, DataType x)
{ /*在顺序表L中定位元素x函数*/
int i=0;
while(i<L->Length && L->data[i]!= x)
i++;
if (i>=L->Length)
return 0;
else
return i+1; /*返回的是元素位置*/
}
int InsElem(SeqList *L, int i, DataType x)
{ /*在顺序表L中在第i位中插入新元素x函数*/
int j;
if (L->Length>=MAXLEN)
{ printf ("顺序表已满!");
return -1; /*表满,不能插入*/
}
if (i<1 || i>L->Length+1) /*检查给定的插入位置的正确性*/
{ printf("插入位置出错!");
return 0;
}
if (i == L->Length+1) /*插入的位置为表尾,则不需移动直接插入即可*/
{ L->data[i-1]=x;
L->Length++;
return 1;
}
for (j=L->Length-1; j>=i-1; j--) /*插入表中某位置,则插入点后各结点后移*/
L->data[j+1]=L->data[j];
L->data[i-1]=x; /*新元素插入*/
L->Length++; /*顺序表长度增1 */
return 1; /*插入成功,返回*/
}
int DelElem (SeqList *L, int i, DataType *x)
{ /*在顺序表L中删除第i位元素函数*/
int j;
if (L->Length==0)
{ printf ("顺序表为空!");
return 0; /*表空,不能删除*/
}
if (i<1 || i>L->Length) /*检查是否空表及删除位置的合法性*/
{ printf ("不存在第i个元素");
return 0;
}
*x= L->data[i-1]; /*用指针变量*x返回删除的元素值*/
for(j=i;j<L->Length;j++) /*结点移动*/
L->data[j-1]=L->data[j];
L->Length--; /*顺序表长度减1*/
return 1; /*删除成功,返回*/
}
//课后题4.2设计一个算法,删除顺序表中的值为x的所有结点
void delall(SeqList *L , DataType x){
int i = 0 , j , k;
do{
while(i<L->Length && L->data[i] != x){
i++;
}
k = 0;
for(j = i+1 ; j < L->Length ; j++){
L->data[i+k] = L->data[j];
k++;
}
L->Length--;
}while(i<L->Length);
L->Length = i;
}
void DispList(SeqList *L)
{ /*显示输出顺序表L的每个元素函数*/
int i;
for(i=0;i< L->Length;i++)
printf("%5d ", L->data[i]);
printf("\n\n") ;
}
void Menu(){
printf("===========线性表子系统==========\n");
printf("\t1.---创建\n");
printf("\t2.---插入\n");
printf("\t3.---删除\n");
printf("\t4.---按位置查找\n");
printf("\t5.---按元素查找\n");
printf("\t6.---删除表中的某个值\n");
printf("\t0.---返回\n");
printf("\t请输入0~6之间的数字\n");
printf("============================\n");
}
int main() {
SeqList L;
InitList( &L );
int n;
DataType x;
int i;
int loc;
char ch1 = 'y', ch2 , ch3;
//Menu();
while(ch1== 'y' ||ch1 == 'Y'){
Menu();
scanf("%c" , &ch2);
switch(ch2){
case '1':
printf("请输入一个整数:") ;
scanf("%d" , &n);
CreateList(&L, n);
DispList(&L);
break;
case '2':
printf("请输入要插入元素的位置:");
scanf("%d" , &i);
printf("请输入要插入的元素:") ;
scanf("%d" , &x);
loc = InsElem(&L, i, x);
if(loc){
printf("插入成功!\n");
DispList(&L);
}else{
printf("插入失败!\n\n");
}
break;
case '3':
printf("请输入要删除元素的位置:");
scanf("%d" , &i);
loc = DelElem (&L, i, &x);
if(loc){
printf("删除成功!\n");
DispList(&L);
}else{
printf("删除失败!\n\n");
}
break;
case '4':
printf("请输入要查找的位置:") ;
scanf("%d" , &i);
int loc;
loc = GetElem(&L, i, &x);
if(loc){
printf("查找成功~\n\n");
printf("在第%d位置上找到了元素%d\n\n" , i , x);
}else{
printf("查找不成功~\n\n");
}
break;
case '5':
printf("请输入要查找的元素值:") ;
scanf("%d" , &x);
loc = Locate(&L, x);
if(loc){
printf("在第%d位置上找到了元素%d!\n\n" , loc , x);
}else{
printf("未找到元素%d!\n\n" , x);
}
break;
case '6':
printf("请输入要删除的元素值:");
scanf("%d" , &x);
delall(&L , x);
DispList(&L);
break;
case '0':
ch1 = 'n';
break;
}
if(ch2 != '\0'){
printf("\n按回车键继续 , 按做任意键返回主菜单\n");
ch3 = getchar();
if(ch3 != '\xA'){
getchar();
ch1 = 'n';
}
}
}
}
相关文章
- Java 数据结构(链表LinkedList增删改查、数组Vector、获取Vector最大值、交换Vector两成员位置、栈的实现、压栈出栈实现反转、队列Queue)
- 每周一道数据结构(四)A*算法&博弈树α-β剪枝
- 数据结构之递归
- Linux 内核里的数据结构——基数树
- 【初阶数据结构与算法】第二篇:顺序表
- 【数据结构初阶】 顺序表三道题,带你见力扣
- 数据结构 领取礼品的顺序 (STL+模拟)
- 后缀表达式的计算【C语言】【数据结构】
- 《数据结构与算法 C语言版》—— 2.7习题
- 「Java 数据结构」:手撕单链表的增删改查及大厂面试题。
- 数据结构 | 随机存取、顺序存取、随机存储和顺序存储
- 【数据结构】顺序栈的C语言实现
- 【Leetcode 数据结构专题】DAY1:反转链表 II
- 算法和数据结构
- Java数据结构与算法 day06 查找算法与哈希表
- 王道数据结构 (18) 快速排序
- 50数据结构与算法分析之---顺序查找
- 05数据结构与算法分析之---顺序表