数据结构练习题(顺序表和单链表)C++
1、
编程实现顺序表的各种基本运算,并在此基础上设计⼀个主程序,完成如下功能:
(1)初始化顺序表;
(2)给定⼀个整型数据元素,将此元素插⼊到顺序表的第i个位置;
(3)删除顺序表中第i个位置的元素,利⽤e返回被删除的元素。
#include<stdio.h>
#include<stdlib.h>
#define OK  1
#define ERROR  0
#define OVERFLOW  -2
typedef int  ElemType;
typedef int  Status;
//----- 顺序表的顺序存储表⽰ -----
#define LIST_INIT_SIZE 100 // 存储空间的初始分配量
#define LISTINCREMENT 10 // 存储空间的分配增量
typedef struct{
ElemType *elem;// 存储空间的基址
int length;// 表长
int size;// 存储容量
int increment;// 扩容时,增加的存储容量
} SqList;//顺序表
/
/ 构造⼀个顺序表
Status InitSqlist(SqList &L){
L.elem =(ElemType *)malloc(LIST_INIT_SIZE *sizeof(ElemType));
if(!L.elem) exit (OVERFLOW);
L.length =0;
L.size = LIST_INIT_SIZE;
L.increment = LISTINCREMENT;
return OK;
}
// 判顺序表是否为空表
Status ListEmpty(SqList L){
if(L.length==0)return OK;
else return ERROR;
}
//顺序表插⼊函数
Status ListInsert_Sq(SqList &L,int i ,ElemType e){
//请在此填写代码,将该算法补充完整,参见课本和课件相关章节
int j;
if(i<1|| i>L.length+1)
return false;
i--;
for(j=L.length;j>i;j--)
L.elem[j]=L.elem[j-1];
L.elem[i]=e;
L.length++;
return true;
}
//顺序表删除元素函数
Status ListDelete_Sq(SqList &L,int i, ElemType  &e){
//请在此填写代码,将该算法补充完整,参见课本和课件相关章节
int j;
if(i<1||i>L.length)
return false;
i--;
i--;
e=L.elem[i];
for(j=i;j<L.length-1;j++)
L.elem[j]=L.elem[j+1];
L.length--;
return true;
}
//输出顺序表函数
void OutList_Sq(SqList L)
{int i;
ElemType  e;
if(ListEmpty(L)){
printf("这是⼀个空表!");
}
else
{
printf("顺序表为:");
for(i=0;i<L.length;i++)
printf("%6d",L.elem[i]);
}
printf("\n");
}
//主函数
int main()
{ SqList L;
int cord,i; ElemType a;
printf(" 姓名:蔡旭胜 \n 学号:2050414821 \n 班级:软件设计11班"); printf("第⼀次使⽤必须初始化!\n");
c语言listinsert函数do{
printf("\n 主菜单 \n");
printf(" 1 初始化顺序表 ");
printf(" 2 插⼊⼀个元素 ");
printf(" 3 删除⼀个元素 ");
printf(" 4 结束程序运⾏ ");
printf("\n-------------------------------------------------------------------\n"); printf("请输⼊您的选择( 1, 2, 3, 4)");
scanf("%d",&cord);
printf("\n");
switch(cord){
case1:
InitSqlist(L);
OutList_Sq(L);
break;
case2:
printf("\n请输⼊要插⼊的插⼊位置和数据元素(如:3 20)");
scanf("%d%d",&i,&a);
ListInsert_Sq(L,i,a);
printf("\n插⼊%d元素之后的",a);
OutList_Sq(L);
break;
case3:
printf("\n请输⼊要删除的数据元素的位置(如: 3)");
scanf("%d",&i);
ListDelete_Sq(L,i,a);
printf("\n删除第%d个位置的元素之后",i);
OutList_Sq(L);
break;
case4:
exit(0);
}
}while(cord<=4);
return1;
}
2、
编程实现建⽴⼀个单链表,并在此表中插⼊⼀个元素和删除⼀个元素
(1)通过键盘读取元素建⽴单链表;
(2)指定⼀个位置,在此位置之前插⼊⼀个新元素;
(3)指定⼀个位置,删除此位置元素。
#include"stdio.h"
#include"stdlib.h"
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct Lnode {
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
/
/以下是建⽴单链表
void CreatList_L(LinkList &head)
{ LinkList tail, p;
int n,i;
p=(Lnode *)malloc(sizeof(Lnode));
head=tail=p;
head->next=NULL;
printf("\n请输⼊链表的长度:");
scanf("%d",&n);
printf("\n请输⼊%d个整型数据元素",n);
for(i=1;i<=n;i++){
p=(Lnode *)malloc(sizeof(Lnode));
scanf("%d",&p->data);
p->next=NULL;
tail->next=p;
tail=p;
}
printf("\n单链表的建⽴成功!");
}
//以下是输出单链表
void OutputList_L(LinkList L){
LinkList p = L->next;
if(p==NULL){
printf("是⼀个空表!\n");
return;
}
printf("单链表是:");
while(p ){
printf("%4d",p->data);
p = p->next;
}
printf("\n");
}
/
/在第 i 个元素之前插⼊⼀个元素
Status ListInsert_L(LinkList L,int i, ElemType e){
LinkList p,s;
p=L;
int j=0;
for(j=0;j<i;j++)
{
p=p->next;
}
s=(Lnode *)malloc(sizeof(Lnode));
s->data=e;
s->data=e;
s->next=p->next;
p->next=s;
//请在此填写代码,将该算法补充完整,参见课本和课件相关章节return OK;
}
// 删除第 i 个元素
Status ListDelete_L(LinkList L,int i, ElemType &e){
LinkList p,q;
p=L;
q=L;
int j=0;
for(j=0;j<i-1;j++)
{
p=p->next;
q=q->next;
}
q= q->next;
e=q->data;
p->next=p->next->next;
//请在此填写代码,将该算法补充完整,参见课本和课件相关章节return OK;
}
int main()
{ LinkList L;
int cord,i; ElemType a;
printf(" 姓名:蔡旭胜 \n 学号:2050414821 \n 班级:软件设计11班"); printf("\n 您是第⼀次使⽤请先创建⼀个单链表!\n");
do{
printf("\n 主菜单 \n");
printf(" 1 创建⼀个单链表 ");
printf(" 2 插⼊⼀个元素 ");
printf(" 3 删除⼀个元素 ");
printf(" 4 结束程序运⾏ ");
printf("\n-------------------------------------------------------------------\n"); printf("请输⼊您的选择( 1, 2, 3, 4)");
scanf("%d",&cord);
printf("\n");
switch(cord){
case1:
CreatList_L(L);
OutputList_L(L);
break;
case2:
printf("\n请输⼊要插⼊的插⼊位置和数据元素(如:3 20)");
scanf("%d%d",&i,&a);
if(ListInsert_L(L,i,a))
{
printf("\n插⼊元素成功!插⼊%d元素之后的",a);
OutputList_L(L);
}
else printf("插⼊元素失败!\n");
break;
case3:
printf("\n请输⼊要删除的数据元素的位置(如: 3)");
scanf("%d",&i);
if(ListDelete_L(L,i,a))
{
printf("\n删除元素成功!被删除的元素是 %d\n",a);
printf("\n删除第%d个位置的元素之后",i);
OutputList_L(L);
}
}
else printf("删除位置错误,请重新执⾏!\n"); break;
case4:
exit(0);
}
}while(cord<=4);
return1;
}
来⾃课下作业

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。