#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_数据结构_链表的更多相关文章

  1. C_数据结构_链表的链式实现

    传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...

  2. c_数据结构_图_邻接表

    课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...

  3. c_数据结构_二叉树的遍历实现

    #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #d ...

  4. c_数据结构_队的实现

    # 链式存储#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 #defin ...

  5. c_数据结构_栈的实现

    #include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT ...

  6. c_数据结构_顺序表

    #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define ...

  7. C_数据结构_走迷宫

    #include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> ...

  8. C_数据结构_快速排序

    # include <stdio.h> void QuickSort(int * a, int low, int high); int FindPos(int * a, int low, ...

  9. C_数据结构_链式二叉树

    # include <stdio.h> # include <malloc.h> struct BTNode { int data; struct BTNode * pLchi ...

随机推荐

  1. CodeForces 937C Save Energy! 水题

    题意: 一个炉子烤鸡,炉子打开的时候一共$T$分钟可以烤完,关闭的时候一共$2T$分钟可以烤完,炉子每$K$分钟自动关闭,厨师每$D$分钟回来检查,打开炉子 问多长时间烤完.. 题解: 用整数写比较稳 ...

  2. HTML中添加音乐video embed audio

    做H5页面时需要添加背景音乐,方法如下 方式一:<video controls="" autoplay="" name="media" ...

  3. ASP.NET MVC5入门3之登录验证

    参考: HTML页面模版: http://www.ui.cn/detail/70262.html(第38个) MVC后台代码参考: http://www.oschina.net/p/nfine 开发环 ...

  4. [Linux]关于字节序的解析

    剥鸡蛋的故事 <格列佛游记>中记载了两个征战的强国,你不会想到的是,他们打仗竟然和剥鸡蛋的姿势有关. 很多人认为,剥鸡蛋时应该打破鸡蛋较大的一端,这群人被称作“大端(Big endian) ...

  5. 在v-html中,js 正则表达式清除字符串里的style属性

    项目中遇到这样的需求,后端返回的是字符串,在vue用v-html显示,里面有style样式,要去除style 在v-html中使用filters,和平时的不一样,推荐项目的方法,定义一个全局的过滤方法 ...

  6. react轮播图----react-slick

    1.安装 npm install react-slick; //安装样式 npm install slick carousel; 再在App.css中引入 @import "~slick-c ...

  7. Oracle 所有的权限列表

  8. 关闭VirtualBox虚拟机的时钟同步

    原文链接:关闭VirtualBox虚拟机的时钟同步 在VirtualBox的虚拟机上默认虚拟机的时间是会和物理机同步的,但可以通过下面的命令来关闭 1. 首先查看虚拟机列表 VBoxManage li ...

  9. Confluence 6 配置手动备份

    如果你希望关闭自动备份,你可以选择手动导出保存站点.请参考 Manually Backing Up the Site 页面中的内容获得更多的信息. 这些文件没有自动备份在同样的路径中,这些文件存储在 ...

  10. js----常用功能

    切割 1. a="ddd" a.substr(0,1) 通过js找子代 document.getElementByClass("ddd").getElement ...