C 语言链表操作例程 (待完善)
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<stdlib.h>
#include "math.h"
#define NULL 0
#define LEN sizeof(struct cle)
struct cle
{
int num;
struct cle *next;
};
int n;
char c=0;
/*定义输入函数*/
struct cle *input(void)
{
char c;
struct cle *head;
struct cle *p1,*p2;
n=0;
p1=(struct cle *)malloc(LEN);/*开辟一个新单元*/
p2=(struct cle *)malloc(LEN);
printf("请输入第一个元素: ");
scanf("%d",&p1->num);
do{
n=n+1;
if(n==1) head=p1;
else
p2->next=p1;
p2=p1;
p1=( struct cle*)malloc(LEN);
printf("请输入下一个元素: ");
scanf("%d",&p1->num);
c=getch();
}
while((c=='o')&&(p1->num!=0));
p2->next=NULL;
return(head);
}
/*定义一个输出链表的函数*/
void display( struct cle *head)
{
struct cle *p;
p=head;
printf("所以元素:");
if(head!=NULL)
do
{
printf("%3d",p->num);
p=p->next;
} while(p!=NULL);
}
/*定义删除函数*/
struct cle *del( struct cle *head)
{
int num;
char c;
struct cle *p1,*p2;
do
{
if(head==NULL)
{
printf("\n线性表为空表!\n");
return(head);
}
printf("请输入要删除的元素: ");
scanf("%d",&num);
p1=head;
while(num!=p1->num &&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("已删除元素%d",num);
n=n-1;
}
else
printf("该元素不存在!");
printf("是否继续删除,Y/N");
c=getch();
}while(c=='Y');
return (head);
}
/*定义插入函数*/
struct cle *insert(struct cle *head)
{
int num;
struct cle *p0,*p1,*p2;
int i,k,j=0;
char c;
do
{
p0=(struct cle *)malloc(LEN);
printf("请输入要插入的元素: ");
scanf("%d",&p0->num);
if(head==NULL)
{
head=p0;
p0->next=NULL;
}
else
{
p1=head;
n=0;
for(k=1;p1->next!=NULL;k++)
{
n=n+1;
p1=p1->next;
}
p2=head;
printf("请输入元素插入的位置:");
scanf("%d",&i);
while(i<=n+1&&j<i-1)
{
p2=p2->next;
++j;
}
if(i>n+1||j>i-1) return 0;
p0->next=p2->next;
p2->next=p0;
}
printf("是否继续插入,Y/N");
c=getch();
}while(c=='Y');
return(head);
}
/*定义main函数*/
main()
{
struct cle *head;
int del_num,insert_num;
int i;
printf("```主菜单```\n");
printf("1.输入函数\n");
printf("2.显示函数\n");
printf("3.删除函数\n");
printf("4.插入函数");
char ch='y';
while(ch=='y')
{
printf("\n请输入你的选择:");
scanf("%d",&i);
switch(i)
{
case 1: head=input(); break;
case 2: display(head); break;
case 3: del(head); break;
case 4: insert(head); break;
}
}
system("pause");
return 0;
}
C 语言链表操作例程 (待完善)的更多相关文章
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- C语言,单链表操作(增删改查)(version 0.1)
这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...
- c语言实现--带头结点单链表操作
可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址 ...
- C语言字符串操作总结大全(超详细)
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat( ...
- C# 链表操作
关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...
- C语言 链表
原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...
- C语言链表实例--玩转链表
下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...
- 零基础学习C语言字符串操作总结大全
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...
随机推荐
- 转: ubuntu配置NFS,挂载开发板
====================================== 命令: 1. $sudo apt-get install nfs-kernel-server (安装N ...
- 一句话输出网站404页面,REFER及相关排序
cat www.log|awk '$9~/404/ {print $7"," $11}'|sort|uniq -c|sort -nr > ./www404.csv
- java的CalssLoader
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1.0 就出现了,最初是为了满足 Ja ...
- BIND9源码学习笔记1---gdb调试篇
学习bind9源码之前,首先要知道如何用gdb来调试bind.BIND9的源码我是先看代码弄懂它的架构,像什么event-drive,epoll等, 再去看它的业务流程.看业务流程的时候要追踪它的数据 ...
- Java如何让异常处理机制更完备规范
1)catch的Exception一定要详细的点名是某种异常而非一概而论的用Exception ex来接收所有的异常,往往不理解这点的人也不能很好的理解catch的意义到底在哪里,是对捕获的异常进行一 ...
- prepareStatement的用法和解释
1. PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2. 使用 Statement 对象.在对数据库只执行一次性存取的时侯,用 Statement ...
- Javascript:getElementsByClassName
背景: 由于原生的getElementsByClassName不支持在指定标签中查找指定元素为指定class的情况,所以,这里舍弃了原生的方法调用 方法一: function getElement ...
- 【iOS基础】iOS 线程相关技术
零.线程的注意点(掌握)1.不要同时开太多的线程(1~3条线程即可,不要超过5条)2.线程概念1> 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件2> 子线程 : 后台线程, ...
- Node.js 博客实例(六)留言功能
原教程https://github.com/nswbmw/N-blog/wiki/_pages的第六章,因为版本号等的原因,在原教程基础上稍加修改就可以实现. 实现用户给文章留言的功能,留言保存在数据 ...
- jQuery -> 获取兄弟元�
获取指定元素的兄弟元素时,能够使用adjacent sibling combinator (+),当中+的两側内容都是selector expression. 假设要获取下例中全部的 h1的直接兄弟元 ...