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 ...
随机推荐
- RT-thread嵌入式操作系统相关的问题
面试中问到 RT-thread嵌入式操作系统相关的问题 RT-thread操作系统调度器的实现细节 RT-Thread中提供的线程调度器是基于优先级的全抢占式调度: 在系统中除了中断处理函数.调度器上 ...
- 部署openfaas
首先必须部署Docker CE 17.05或者以上版本. 首先卸载旧版本, $ sudo yum remove docker \ docker-common \ docker-selinux \ do ...
- modsign: could't get uefi db list
手头上一个工控机,装完 ubuntu 16.04后重启, 一直提示如下错误: modsign: could't get uefi db list 用过ubuntu的修复工具也没有成功. 后经过如下操 ...
- var_export 掉咋天
var_export 文件缓存经常使用 输出或返回一个变量的字符串表示 /** * 写入缓存 * * @param string $id * @param mixed $data * @ ...
- Linux命令之useradd和userdel(添加、删除用户)
一.[useradd]:添加用户命令 1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s sh ...
- bootstrap Autocomplete
首先应用文件(已上传到文件,需要可自行下载) <link href="~/bower_components/select2/dist/css/select2.css" rel ...
- ios NSTimer的强引用问题
在一个controller中,使用 NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest ...
- 虚拟机时间同步14 Aug 04:09:18 ntpdate[2941]: no server suitable for synchronization found
因为虚拟机经常挂起,所以需要时间同步 [root@slave1 /root]$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp: over ...
- Confluence 6 查看你的许可证细节
希望查看你的 Confluence 许可证: 进入 > 基本配置(General Configuration). 在左侧的面板中选择 许可证详细(License Details). 你的许可证 ...
- 自定义Web框架
http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本 ...