0
点赞
收藏
分享

微信扫一扫

大学数据结构实验(二.链表的应用一)


大学程序实验.数据结构.链表的应用一.基本练习题

  • ​​0 目录​​
  • ​​2 链表的应用​​
  • ​​2.1 基本练习题​​
  • ​​2.1.1 题目​​
  • ​​2.1.2 源码​​
  • ​​1.1.3 下载​​

  • ​​2 下一章​​

0 目录

2 链表的应用

2.1 基本练习题

2.1.1 题目

从键盘输入一组整型元素序列,建立链表。要求输入元素递增,如果不递增提示重新输入刚才错误的数据。
实现该链表的遍历。
在该链表中进行顺序查找某一元素,查找成功返回1,否则返回0。
把元素x插入递增有序表中,仍保持有序性。
把递增的链表扩大成2倍大小,把链表变成前后对称的链表。

2.1.2 源码

// 链表.cpp : Defines the entry point for the console application.
//
/***********************************************************************
* 头文件包含
***********************************************************************/
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"

/***********************************************************************
* 本地宏定义
***********************************************************************/
#define VALUE 3
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;
typedef int ElemType;

typedef struct Node
{
ElemType data;
struct Node *next;
}Node;

typedef struct Node *LinkList;

/*********************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 参数列表 :
* 函数输出 :
*********************************************************************/
Status main()
{
LinkList L;

void initList(LinkList &L);
Status ListCreate(LinkList &L);
Status ListMenu();
Status ListTraver(LinkList &L);
Status ListSearch(LinkList &L);
Status ListInsert(LinkList &L);
Status ListExpand(LinkList &L);

initList(L);
ListCreate(L);

Label:
int result;
result=ListMenu();

if(result==1)
{
ListTraver(L);
goto Label;
}
else if(result==2)
{
int research;
research=ListSearch(L);
if(research)
{
printf("查找成功!\n");
goto Label;
}
else
{
printf("无此元素!\n");
goto Label;
}
}
else if(result==3)
{
int reinsert;
reinsert=ListInsert(L);
if(reinsert)
{
printf("插入成功!\n");
goto Label;
}
else
{
printf("插入失败!\n");
goto Label;
}
}
else if(result==4)
{
int reexpand;
reexpand=ListExpand(L);
if(reexpand)
{
printf("扩展成功!\n");
goto Label;
}
}
else
{
printf("退出!");
}

return OK;
}

/*********************************************************************
* 函 数 名 : initList
* 函数功能 : 初始化函数
* 参数列表 :
* 函数输出 :
*********************************************************************/
void initList(LinkList &L)
{
L=NULL;
}

Status ListCreate(LinkList &L)
{
LinkList p,Head;
int value;

L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
Head=L;

if(L==NULL)
{
return ERROR;
}

printf("初始输入部分\n");
printf("请输入%d个递增整型数据:\n",VALUE);

for(int i=0;i<VALUE;i++)
{
p=(Node *)malloc(sizeof(Node));

if(p==NULL)
{
return ERROR;
}

if(i==0)
{
scanf("%d",&value);
p->data=value;
Head->next=p;
Head=p;
}
else
{
label:
scanf("%d",&p->data);

if(p->data>value)
{
value=p->data;

Head->next=p;
Head=p;
}
else
{
printf("\n");
printf("错误类型,请重新输入递增整型数据:\n");
goto label;
}
}

}
Head->next=NULL;

return OK;
}

/*********************************************************************
* 函 数 名 : ListMenu
* 函数功能 : 目录函数
* 参数列表 :
* 函数输出 :
*********************************************************************/
Status ListMenu()
{
printf("\n");
printf("链表操作目录:\n");
printf("1 遍历链表\n");
printf("2 查找元素\n");
printf("3 插入元素\n");
printf("4 对称扩展链表\n");
printf("5 退出\n");
printf("请输入你要执行的操作:\n");

int value;
label:
scanf("%d",&value);
if((value>0)&&(value<6))
{
return value;
}
else
{
printf("请输入正确的操作!\n");
goto label;
}
}

/*********************************************************************
* 函 数 名 : ListTraver
* 函数功能 : 遍历函数
* 参数列表 :
* 函数输出 :
*********************************************************************/
Status ListTraver(LinkList &L)
{
LinkList p=L->next;

while(p)
{
printf("%3d\n",p->data);
p=p->next;
}
printf("\n");

return OK;
}

/*********************************************************************
* 函 数 名 : ListSearch
* 函数功能 : 查找函数
* 参数列表 :
* 函数输出 :
*********************************************************************/
Status ListSearch(LinkList &L)
{
LinkList p;
int i=1;
int search;
int value=FALSE;

printf("请输入你要查询的整数数字:\n");
scanf("%d",&search);

for(p=L;p;++i,p=p->next)
{
if(p->data==search)
{
value=TRUE;
}
}

return value;
}

/*********************************************************************
* 函 数 名 : ListInsert
* 函数功能 : 插入函数
* 参数列表 :
* 函数输出 :
*********************************************************************/
Status ListInsert(LinkList &L)
{
LinkList p,t;
p = L;

printf("请输入你想插入的正整数数据:");
int value;
scanf("%d",&value);

t = (LinkList)malloc(sizeof (Node));
if(!t)
{
return ERROR;
}

t ->data = value;

while(p ->next && p ->next->data < value)
{
p=p->next;
}

t ->next = p ->next;
p ->next = t;
}

/*********************************************************************
* 函 数 名 : ListExpand
* 函数功能 : 扩展函数
* 参数列表 :
* 函数输出 :
*********************************************************************/
Status ListExpand(LinkList &L)
{
LinkList p,q,s;


p=L->next;
L->next=NULL;

while(p)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}

p=L->next;
int length=0;

while(p)
{
p=p->next;
length++;
}

LinkList L1;
L1=L->next;
for(int i=0;i<length;i++)
{
s=(LinkList)malloc(sizeof(Node));
s->data=L1->data;
L1=L1->next;
s->next=L->next;
L->next=s;
}

return OK;
}

1.1.3 下载

链接地址: ​​2.1_链表基本练习题.CPP​​

2 下一章

博客地址: ​​大学数据结构实验(二.链表的应用二)​​


举报

相关推荐

0 条评论