#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 语言链表操作例程 (待完善)的更多相关文章

  1. C语言链表操作模板(添加,删除,遍历,排序)

    C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...

  2. ZT C语言链表操作(新增单向链表的逆序建立)

    这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...

  3. C语言,单链表操作(增删改查)(version 0.1)

    这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...

  4. c语言实现--带头结点单链表操作

    可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址 ...

  5. C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

  6. C# 链表操作

    关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...

  7. C语言 链表

    原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...

  8. C语言链表实例--玩转链表

    下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...

  9. 零基础学习C语言字符串操作总结大全

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...

随机推荐

  1. 转: ubuntu配置NFS,挂载开发板

    ====================================== 命令: 1. $sudo apt-get install nfs-kernel-server           (安装N ...

  2. android 适配器simpleadapter和baseadapter区别

    android 适配器 simpleadapter 和 baseadapter 设计网络程序或者数据处理显示程序的时候,常常会使用 simpleadapter 和baseadapter 来实现. ad ...

  3. HttpClient and FileUpload

    All communication over the Internet happens using a standard set of protocols, such as File Transfer ...

  4. COJ 0036 数数happy有多少个?

    数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...

  5. 从windows server 2003中学到的事儿

    2003让我学会了几件事儿, 第一.自己会装系统了. 第二.知道很多选项是可以自己进行设置的.这点很重要,本来xp用得很习惯,然后很多都理所当然得认为,就应该是那个样子,可是,并不是的. 在2003不 ...

  6. iOS 9之WatchKit for WatchOS 2

    金田(github示例源码) 自AppleWatch发行的同时就可以为AppWatch开发相应的应用程序,不过最初的版本,能开发的功能极为有限,所以也只是有少数的App厂商为Apple定制了App,所 ...

  7. linux应用程序地址布局

    Linux应用程序在内存中的布局,由高地址到低地址依次为:栈.堆.BSS段.数据段.代码段.代码段的起始地址固定为0x8048000,无论哪一个应用程序它的代码段起始地址一定是0x8048000,这里 ...

  8. Android调用系统相机和文件浏览器

    //拍照功能,调用系统的相机功能 Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResul ...

  9. MSSQL 生成有意义的PROC

    MSSQL 生成有意义的PROC --MSSQL  用PROC 生成有意义的单号:如WP200011101 GO/****** 对象:  Table [dbo].[tbl_SequenceNum]   ...

  10. MD中bitmap源代码分析--SYNC IO和RAID5的补充

    最近在做bwraid的R6的设计工作,需要调研一下bitmap下刷磁盘的IO属性(是否为SYNC IO),还有raid5中bitmap的存储和工作方式. 1.bitmap刷磁盘是否为 SYNC IO? ...