永发信息网

数据结构 c语言版 ——顺序表的查找、插入与删除

答案:2  悬赏:40  手机版
解决时间 2021-02-01 09:15
  • 提问者网友:骑士
  • 2021-01-31 22:21
1. 实验项目的目的和任务
顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求:
1) 从键盘输入10个整数,产生顺序表,并输入结点值。
2) 从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。
3) 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。
4) 从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。
2. 上机实验内容
1. 定义一个整型数组。用于存放顺序表的数据元素
2. 设计一个函数,完成顺序表的建立。
从键盘输入10个整数,产生顺序表,并输入结点值。
3. 设计一个函数,完成顺序表的查找。
从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。
4. 设计一个函数,完成顺序表的插入。
从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果。
5. 设计一个函数,完成顺序表的删除。
从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。
6. 设计一个函数,用于顺序显示当前线性表中的所以元素。

3. 主要实验方法
程序主框架已经设计好。见SqList.C文件。请按要求设计各个函数,并完成正确调用。
下面是SqList.C里的内容
#include<stdio.h>
#include<stdlib.h>
#define N 10 //顺序表的最大容量
int length=0; //顺序表的当前元素个数
void main()
{
int List[N];
char ch,exit='N';
do
{
system("CLS");
printf("\t\t********************************************\n");
printf("\t\t* 1.创建一个顺序表 .........(1) *\n");
printf("\t\t* 2.在顺序表中查找元表.........(2) *\n");
printf("\t\t* 3.在顺序表中插入元表.........(3) *\n");
printf("\t\t* 4.在顺序表中删除元表.........(4) *\n");
printf("\t\t* 5.退出 .........(5) *\n");
printf("\t\t********************************************\n");
printf("\n请选择操作代码:");
ch=getchar();
getchar();
switch(ch)
{
case '1':
//请在这里调用创建顺序表的函数,并删除printf函数
printf("创建一个顺序表\n");
break;
case '2':
//请在这里调用查找元素的函数,并删除printf函数
printf("在顺序表中查找元表\n");
break;
case '3':
//请在这里调用插入元素的函数,并删除printf函数
printf("在顺序表中插入元表\n");
break;
case '4':
//请在这里调用删除元素的函数,并删除printf函数
printf("在顺序表中删除元表\n");
break;
case '5':
printf("\n您是否真的要退出程序(Y/N):");
exit=getchar();getchar();
break;
default:
printf("\n无效输入,请重新选择...:");

}

}while(exit!='y'&&exit!='Y');

}
答好的程序请发到1341066904@qq.com 急用谢了 满意的可再加分
最佳答案
  • 五星知识达人网友:轮獄道
  • 2021-01-31 22:56
#include<stdio.h>
#include<stdlib.h>
#define N 10 //顺序表的最大容量
int length=0; //顺序表的当前元素个数

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100//线性表存储的空间初始化分配量
#define LISTINCREAMENT 10 //线性表存储空间的分配增量

typedef struct LNode//线性单链表存储结构
{
int data;
struct LNode *next;
}LNode,*LinkList;

int CreatList_L(LinkList&L)//创建一个线性链表
{
L=(LinkList)malloc(sizeof(LNode));//分配一个空间给链表,作为头结点

if(!L) exit(OVERFLOW);
L->next=NULL;
return OK;
}
int DestroyList_L(LinkList &L)//销毁链表
{
if(L) free(L);
return OK;
}
int ListInsert_L(LinkList&L,int i,int e)//再练表的第i个元素前插入一个元素e
{
LinkList p=L;//p指针定位于i-1
LNode *s;
int j=0;
while(p&&j<i-1) {p=p->next;j++;}//定位
if(!p||j>i-1) return ERROR;//如果i<1或大于链表元素个数+1
s=(LNode*)malloc(sizeof(LNode));
if(!s) exit(OVERFLOW);
s->data=e; //完成插入操作
s->next=p->next;
p->next=s;
return OK;
}

int ListDelet_L(LinkList&L,int i,int&e)//删除链表L中的第i个元素,并返回给e;
{
LinkList p=L;
LNode* q;
int j=0;
while(!p&&j<i-1) {p=p->next;j++;}//p指针定位于i-1;
if(!p->next||j>i-1) return ERROR;

e=p->next->data; //完成删除操作
q=p->next;
p->next=p->next->next;
free(q);
return OK;

}

int ListTraverse_L(LinkList L,int n)//链表的遍历
{
int i=0;
if(!L)return ERROR;
L=L->next;
while(L)
{
if(L->data==n)return i;
L=L->next;
i++;
}

return FALSE;
}

int InverseSingleList_L(LinkList &L)
{
if(!L->next||!L->next->next)//如果链表少于2个Node那么链表不需要改变顺序
return OK;
LNode *p,*q;
p=L->next; //第一次因为p是最后一个连接所以把p->next设为空
q=p->next;
p->next=NULL;
p=q;
while(p)
{
q=p->next; //用q去保留p后面一个Node;
p->next=L->next;
L->next=p;
p=q;
}
return OK;
}

int main()
{
int List[N];
LinkList L;

int ch,exit='N';
do
{
system("CLS");
printf("\t\t********************************************\n");
printf("\t\t* 1.创建一个顺序表 .........(1) *\n");
printf("\t\t* 2.在顺序表中查找元表.........(2) *\n");
printf("\t\t* 3.在顺序表中插入元表.........(3) *\n");
printf("\t\t* 4.在顺序表中删除元表.........(4) *\n");
printf("\t\t* 5.退出 .........(5) *\n");
printf("\t\t********************************************\n");
printf("\n请选择操作代码:");
ch=getchar();

switch(ch)
{
case '1':
printf("\n请输入十个元素");
CreatList_L(L);
for(length=0;length<N;length++)
{
scanf("%d",&List[length]);
getchar();
ListInsert_L(L,length+1,List[length]);
}
printf("\n创建成功!");
getchar();
break;
case '2':
scanf("%d",&List[0]);
if(ListTraverse_L(L,List[0]))printf("该元素存在该年表的第%d个位置",ListTraverse_L(L,List[0]));
else printf("不存在该元素");
getchar();
break;
case '3':
scanf("%d%d",&length,&List[0]);
ListInsert_L(L,length,List[0]);
system("pause");
break;
case '4':
scanf("%d",&length);
ListDelet_L(L,length,List[0]);
system("pause");
break;
case '5':
printf("\n您是否真的要退出程序(Y/N):");
getchar();
exit=getchar();
break;
default:
getchar();
printf("\n无效输入,请重新选择...:");
getchar();
break;

}

}while(exit!='y'&&exit!='Y');

}
全部回答
  • 1楼网友:舍身薄凉客
  • 2021-02-01 00:29

#include<stdio.h> #include <string.h> #define  maxsize 100 typedef struct { int data[maxsize]; int length; }seqlist;

void greadlist(seqlist &l,int n) { int i; printf("请输入建立的线性表:"); for(i=0;i<n;i++) scanf("%d",&l.data[i]); l.length=n; }

void getdata(seqlist l,int i) { if(i<1||i>l.length) printf("i值有误!\n"); else printf("%5d\n",l.data[i-1]); }

int locate(seqlist l,int e) { int i=0; while((i<=l.length-1)&&(l.data[i]!=e)) i++; if(i<l.length) return(i+1); else return(-1); }

int inslist(seqlist &l,int i,int e) { int k; if(i<1||(i>l.length-1)) { printf("插入位置不合法!"); return 0; } if(l.length>=maxsize) { printf("表已满无法插入!"); return(0); } for(k=l.length-1;k>=i-1;k--) l.data[k+1]=l.data[k]; l.data[i-1]=e; l.length++; return(1); }

void mergec(seqlist la,seqlist lb,seqlist lc) { int i,j,k,l; i=0;k=0;j=0; while((i<la.length)&&(j<lb.length)) if(la.data[i]<=lb.data[j]) { lc.data[k]=la.data[i]; i++;k++; } else { lc.data[k]=lb.data[j]; j++;k++; } while(i<la.length) { lc.data[k]=la.data[i]; k++;i++; } while(j<lb.length) { lc.data[k]=lb.data[j]; j++;k++; } lc.length=la.length+lb.length; }

void main() {  seqlist l;  int i;  //int *e; greadlist(l,8); printf("线性表的输出:"); for(i=0;i<l.length;i++) printf("%5d",l.data[i]); printf("\n"); printf("输出按序号查找的数为:"); getdata(l,5); printf("输出按值查找的结果:%3d\n",locate(l,5)); inslist(l,3,11); printf("线性表的输出:"); for(i=0;i<l.length;i++) printf("%5d",l.data[i]); printf("\n"); //dellist(l,5,e); }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯