c_数据结构_链表
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define OVERFLOW -2 typedef struct Lnode{
int data;
struct Lnode *next;
}LNode,*LinkList;
//初始化一个空指针
int InitList_L(LinkList &L){ L=(LNode *)malloc(sizeof(struct Lnode));
// L->data=info;
L->next=NULL; return OK; }
//查找元素
int Yin(LinkList L,int &r){
LinkList p;int x=;int j=;int i; printf("请选择:1.继续查询\n2.结束查询\n");
printf("请输入选择:");
scanf("%d",&x);
if(x==){
printf("\n请选择查询元素位置:");
scanf("%d",&i);
p=L->next;
while(p&&j<i){
// printf("*****\n");
p=p->next;
++j;
}
if(!p||j>i){
printf("\n查询位置不在列表内!!\n\n");
//return ERROR;
Yin(L,r);
}else{return ERROR;}
//return OK;
}
// printf("******");
return OK; } int GetElem_L(LinkList L,int i,int &e){
LinkList p;int x=;int j=;int r,h;
printf("\n请选择查询元素位置:");
scanf("%d",&i);
p=L->next; while(p&&j<i){
// printf("*****\n");
p=p->next;
++j;
}
if(!p||j>i){
printf("\n查询位置不在列表内!!\n\n");
h=Yin(L,r);
if(h==){
return ERROR;
}else{
e=p->data;
printf("\n查找的%d位置的元素为:%d\n\n",i,e);
return OK;
}
}
return OK;
}
//插入元素
ListInser_L(LinkList &L,int i,int e){
LinkList p,s;int j=;
p=L;
printf("\n请选择插入位置:");
scanf("%d",&i);
printf("\n请选择插入元素:");
scanf("%d",&e);
while(p&&j<i-){
p=p->next;
++j;
}
if(!p||j>i-)
{
printf("\n插入位置不在链表长度内!!\n\n");
return ERROR;
}
s=(LNode*)malloc(sizeof(struct Lnode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
// 删除元素
int ListDelete_L(LinkList &L,int i,int e){
LinkList p,q;int j=;
p=L;
printf("\n请输入要删除的位置:");
scanf("%d",&i);
while(p->next&&j<i-){
p=p->next;
++j;
}
if(!(p->next)||j>i-) {
printf("\n删除的位置不在链表长度内!!\n\n");
return ERROR;
}
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
} //创建链表
int creatlist(LinkList &L){
int i;
LinkList p,q;
if(L==NULL)
InitList_L(L);
q=L;
printf("\n请输入链表长度:");
scanf("%d",&i);
while(i<=){
printf("\n输入链表长度不合法,请重新输入表长:");
scanf("%d",&i);
}
printf("\n请输入%d个数:",i);
for(i;i>;i--){
p=(LNode*)malloc(sizeof(struct Lnode));
p->next=NULL;
scanf("%d",&p->data);
q->next=p;
q=p;
}
printf("\n输入成功!!\n\n");
return OK; }
//打印链表中的元素
int pr(LinkList L){
LinkList q;
q=L->next;
printf("\n表中存储元素为:\n");
while(q!=NULL){
printf("%d\n",q->data);
q=q->next;
}
return OK;
}
//清空链表,只保留头结点
void ClearList(LinkList &L){
LinkList p;
while(L->next){
p=L->next;
L->next=p->next;
free(p);
}
printf("清空链表成功!!\n\n");
creatlist(L);
}
void OperateMenu(){ //操作菜单 printf("--------------请选择元素处理方式---------\n\n");
printf("0> 退出\n\n");
printf("1>: 查找给定位置的数据\n\n");
printf("2>: 插入元素\n\n");
printf("3>: 删除元素\n\n");
printf("4>: 打印元素\n\n");
printf("5>: 释放原链表,重新创建新链表\n\n");
printf("请选择对元素的处理:"); } void main(){
LinkList L; int w=,k,i=,e=,boo;
L=NULL;
printf("注:此测试过程输入值应全为数字\n\n");
printf("请用户选择存入数据或退出程序:\n\n");
printf("存入数据请输入:'1'\n\n");
printf("退出请选择'0'或 其它!!\n\n");
printf("请选择:");
scanf("%d",&w);
if(w==){
InitList_L(L);
creatlist(L);
OperateMenu();
scanf("%d",&k);
while(k){
switch(k){
case :break;
case :boo=GetElem_L(L,i,e);
if(boo)
printf("查询成功!!\n\n");
else
printf("查询失败!!\n\n");
break;
case :boo=ListInser_L(L,i,e);
if(boo)
printf("\n插入成功!!\n\n");
else
printf("插入失败!!\n\n");
break;
case :boo=ListDelete_L(L,i,e);
if(boo)
printf("\n删除成功!!\n\n");
else
printf("删除失败!!\n\n");
break;
case :pr(L);break;
case :ClearList(L);break;
}
OperateMenu();
scanf("%d",&k); }
}else{
exit(OVERFLOW);
} }
c_数据结构_链表的更多相关文章
- C_数据结构_链表的链式实现
传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...
- c_数据结构_图_邻接表
课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...
- c_数据结构_二叉树的遍历实现
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #d ...
- c_数据结构_队的实现
# 链式存储#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 #defin ...
- c_数据结构_栈的实现
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT ...
- c_数据结构_顺序表
#define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define ...
- C_数据结构_走迷宫
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> ...
- C_数据结构_快速排序
# include <stdio.h> void QuickSort(int * a, int low, int high); int FindPos(int * a, int low, ...
- C_数据结构_链式二叉树
# include <stdio.h> # include <malloc.h> struct BTNode { int data; struct BTNode * pLchi ...
随机推荐
- Apollo 启动脚本解析
Apollo 启动脚本解析 sudo service docker start -- 是在ubuntu14.04中打开 在dev_start.sh脚本中会调用restart_map_volume.sh ...
- 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)
打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...
- 001_谈阿里核心业务监控平台SunFire的技术架构
<1>阿里全球运行指挥中心(GOC)的SunFire出品 <2>在2016年双11全球购物狂欢节中,天猫全天交易额1207亿元,前30分钟每秒交易峰值17.5万笔,每秒支付峰值 ...
- 《python核心编程第二版》课后习题6-12答案
下午脑子瓦特,想了半天也没有想出算法,刚刚抽风终于实现了,特此记录. ̄□ ̄|| 题目 (a)创建一个名字为 findchr()的函数,findchr()要在字符串 string 中查找字符 char, ...
- Laravel 5.2--如何让表单提交错误,不清空?
控制器 public function store(Request $request) { $validator = Validator::make($request->all(), [ 'Su ...
- VUE 密码验证与提示
1. 概述 1.1 说明 vue项目中,为了较为明了的让用户看到所输入的密码信息的长度与复杂度是否满足要求,开发一个组件来满足此需求(当密码输入时进行密码验证操作,当密码的长度在8到24位之间,密码中 ...
- socket-WebSocket HttpListener TcpListener 服务端客户端的具体使用案例
/// <summary>/// 启动服务监听的ip和端口的主线程/// </summary>/// <param name="tunnelPort" ...
- Confluence 6 配置默认语言界面
Confluence 6 配置默认语言使用的界面. https://www.cwiki.us/display/CONFLUENCEWIKI/Choosing+a+Default+Language
- conda 安装多个版本的python
再添加一个python3.6conda create --name py36 python=3.6然后通过source activate py36来激活环境
- ubuntu 安装Mysql8.0
1. 去官网下载安装包 下载链接:点击打开链接 https://dev.mysql.com/downloads/mysql/ 如果你的系统是32位选择第一个,64位选择第二个 也可以用wget 下载 ...