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;
}

时间: 2024-11-16 15:00:54

C 语言链表操作例程 (待完善)的相关文章

C语言链表操作

v2版为非健全版本,很明显不能再最前端插入. int sll_insert_v2(Node *current, int value) {     Node *prev;     Node *newNode;     while (current != NULL && current->value >= value) {         prev = current;         current = current->next;     }     newNode = 

关于c语言链表的操作

这几天又讲到链表了,但是又忘记了,所以重新把关于链表的建链表,对链表进行排序,然后是删除,插入,以及遍历等功能..但是最近要考试了,所以没有写成菜单的形式..等考试完了,在进行补充吧.. 代码如下... #include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int data; struct node *next; }; int main() { /*建立链表操作*/ int n,x,p

C语言学习之单向链表操作

该文件为单向链表操作的一些接口:(如发现有错误的地方,及时告知,不胜感激!) list.h #ifndef  _CHAINLIST_H_ #define  _CHAINLIST_H_ typedef struct { char key[15]; char name[20]; int age; }DATATYPE_T; typedef struct Node { DATATYPE_T  data; struct Node *next; }chainListType; /* 添加节点到链表末尾 */

C语言字符串操作大全

转载自:C语言字符串操作总结大全(超详细) 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c)

C语言-链表

单向链表:结构体非常适合链表结构,链表的组成:head指针.数据块节点指针p->nest.结束指针NULL. 链表操作:需要首先找到表头head指针.链表的操作包括动态链表的创建.顺序输出.删除节点.插入节点的操作. 动态存储操作函数:(ANSI规则返回的指针类型为void*,早期的为字符型指针) 分配一个块:void *malloc(unsigned int size)  //分配成功则返回指向起始地址的指针void * 分配多个块:void *calloc(unsigned n,unsign

C# 链表操作

关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实现了自定义链表的操作(读者可以在此基础上进一步完善).因为这段代码涉及一些C#技巧,所以贴出来给初学者学习C#提供一点参考. 实体类:     /// <summary>     /// 学生类     /// </summary>     public class Student  

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

下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 name,性别 sex 和成绩 score 等.另一个域为指针域,存放下一结点的首地址.链表中的每一个结点都是同一种结构类型. 指针域: 即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域. 在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域

数据结构上机测试2-1:单链表操作A (顺序建表+关键字删除)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

C语言文件操作函数的编写

 编写文件操作的头文件 /************************************************************************** Copyright(C)    :2014-08-5 toto Filename       :file.h Author          :涂作权 Version         :V1.1 Date            :2014-08-05 Description     :文件操作的头文件 Others