当前位置:文档之家› 顺序表的查找、插入与删除

顺序表的查找、插入与删除

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');}#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-1LNode *s;int j=0;while(p&&j<i-1) {p=p->next;j++;}//定位if(!p||j>i-1) return ERROR;//如果i<1或大于链表元素个数+1s=(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');}。

相关主题