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, ...
随机推荐
- Javascript Array Distinct (array.reduce实现)
javascript 没有原生的Distinct功能 . (至少现在还没有)但我们可以通过简单的script 自己实现 . Distinct就是把数组中重复出现2次或以上的值给删除掉,确保数组内每个值 ...
- Delphi判断进程是否存在(使用CreateToolhelp32Snapshot)
program Project2; uses windows,TLHelp32; function FindProcess(AFileName:string):boolean; var hSnap ...
- Alias Method解决随机类型概率问题
举个例子,游戏中玩家推倒了一个boss,会按如下概率掉落物品:10%掉武器 20%掉饰品 30%掉戒指 40%掉披风.现在要给出下一个掉落的物品类型,或者说一个掉落的随机序列,要求符合上述概率. 一般 ...
- 【转】中断处理函数中不用disable_irq而用disable_irq_nosync原因
原文网址:http://blog.csdn.net/skyflying2012/article/details/8265869 今天在写触摸屏驱动时在中断处理函数中使用disable_irq关中断发现 ...
- 黑马程序员_JavaIO流(二)
字符流的缓冲区 缓冲区的出现提高了对数据的读写效率. 对应类: BufferedWriter BufferedReader 缓冲区要结合流才可以使用. 在流的基础上对流的功能进行了增强. Buffer ...
- 在什么情况下使用struct,struct与class的区别
Struct定义和使用 类是引用类型,是保存在托管堆中的.通过定义类,我们可以在数据的生存期上得到很高的灵活性,但是也会让程序的性能有一定的损失.虽然这种损失很小,但当我们只需要定义一个很小的结构时, ...
- js执行引擎(js解释器)
看字面理解,js执行引擎讲的就是将js代码转化为机器码并执行的过程. 一款 JavaScript 引擎是由 Brendan Eich 在网景的 Navigator 中开发的,它的名字叫做 Spider ...
- iframe切换内容页仍然能自适应大小代码(含js)
function setIframeHeight(iframe) { if (iframe) { var iframeWin = iframe.contentWindow || iframe.cont ...
- JS瀑布流效果
本篇内容实现类似百度图片的呈现功能,瀑布流+自动加载 index13.html <!DOCTYPE html> <html> <head> <meta cha ...
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
UI系列教程第八课:Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现 今天蓝老师要讲的是关于新浪新闻侧滑界面的实现.先看看原图: 如图所示,这种侧滑效果以另一种方式替 ...