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 ...
随机推荐
- cocos2dx 3.x 修改NDK_ROOT、ANDROID_SDK_ROOT、ANT_ROOT路径
CMD到setup.py目录 Python setup.py -h 查看帮助: Options: -h,--help showthis help message and exi ...
- web@前端--html,css,javascript简介、第一个页面(常用标签简介)
1.什么是标签#1.在HTML中规定标签使用英文的的尖括号即`<`和`>`包起来,如`<html>`.`<head>`.`<body>`都是标签,#2. ...
- Light OJ 1012
经典搜索水题...... #include<bits/stdc++.h> using namespace std; const int maxn = 20 + 13; const int ...
- ActiveMQ在Windows下的安装与启动(懒人专属)
其实这些ActiveMQ官网都有,但是如果你懒得看官网,那就直接看这吧! 1. 官网下载最新的ActiveMQ安装包 apache-activemq-x.x.x-bin.zip并解压 2.进入安装 ...
- 洛谷P4451 [国家集训队]整数的lqp拆分 [生成函数]
传送门 题意简述:语文不好不会写,自己看吧 思路如此精妙,代码如此简洁,实是锻炼思维水经验之好题 这种题当然是一眼DP啦. 设\(dp_n\)为把\(n\)拆分后的答案.为了方便我们设\(dp_0=1 ...
- nginx 配置白名单
在http 模块 增加 geo $remote_addr $ip_whitelist{ default 0; include white_ip.conf; } 在location 模块 增加 (注意i ...
- 《 Oracle查询优化改写 技巧与案例 》电子工业出版社
第1章单表查询 11.1 查询表中所有的行与列 11.2 从表中检索部分行 21.3 查找空值 31.4 将空值转换为实际值 41.5 查找满足多个条件的行 51.6 从表中检索部分列 61.7 为列 ...
- Confluence 6 从生产环境中恢复一个测试实例
请参考 Restoring a Test Instance from Production 页面中的内容获得更多完整的说明. 很多 Confluence 的管理员将会使用生产实例运行完整数据和服务的 ...
- Confluence 6 升级自定义的站点和空间布局
随着 Confluence 的演变.默认的站点和空间布局也会随着 Confluence 升级而让使用的所有页面进行改变.随着一些新功能的加入和一些老功能的修改,默认的布局也需要进行修改来支持这些改变. ...
- TabLayout和ViewPager
这里就说下tablayout+viewpager的实现方式:tablayout是android5.0推出来的一个MaterialDesign风格的控件,是专门用来实现tab栏效果的:功能强大,使用方便 ...