设计算法,实现线性结构上的顺序表的建立以及元素的查找、插入与删除.具体实现要求3) 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/12 11:38:48
![设计算法,实现线性结构上的顺序表的建立以及元素的查找、插入与删除.具体实现要求3) 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序](/uploads/image/z/6100664-32-4.jpg?t=%E8%AE%BE%E8%AE%A1%E7%AE%97%E6%B3%95%2C%E5%AE%9E%E7%8E%B0%E7%BA%BF%E6%80%A7%E7%BB%93%E6%9E%84%E4%B8%8A%E7%9A%84%E9%A1%BA%E5%BA%8F%E8%A1%A8%E7%9A%84%E5%BB%BA%E7%AB%8B%E4%BB%A5%E5%8F%8A%E5%85%83%E7%B4%A0%E7%9A%84%E6%9F%A5%E6%89%BE%E3%80%81%E6%8F%92%E5%85%A5%E4%B8%8E%E5%88%A0%E9%99%A4.%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0%E8%A6%81%E6%B1%823%29+%E4%BB%8E%E9%94%AE%E7%9B%98%E8%BE%93%E5%85%A52%E4%B8%AA%E6%95%B4%E6%95%B0%2C%E4%B8%80%E4%B8%AA%E8%A1%A8%E7%A4%BA%E6%AC%B2%E6%8F%92%E5%85%A5%E7%9A%84%E4%BD%8D%E7%BD%AEi%2C%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%A1%A8%E7%A4%BA%E6%AC%B2%E6%8F%92%E5%85%A5%E7%9A%84%E6%95%B0%E5%80%BCx%2C%E5%B0%86x%E6%8F%92%E5%85%A5%E5%9C%A8%E5%AF%B9%E5%BA%94%E4%BD%8D%E7%BD%AE%E4%B8%8A%2C%E8%BE%93%E5%87%BA%E9%A1%BA%E5%BA%8F)
设计算法,实现线性结构上的顺序表的建立以及元素的查找、插入与删除.具体实现要求3) 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序
设计算法,实现线性结构上的顺序表的建立以及元素的查找、插入与删除.具体实现要求
3) 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序表所有结点值,观察输出结果.
4) 从键盘输入1个整数,表示欲删除结点的位置.进行删除,输出顺序表所有结点值,观察输出结果.
设计算法,实现线性结构上的顺序表的建立以及元素的查找、插入与删除.具体实现要求3) 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出顺序
#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) //定位
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指针定位于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("\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');
}