链表操作C语言实现

#include<stdio.h>
#include<malloc.h>

typedef struct node {
int data;
struct node *next;
}node;
node *createlink()  //创建链表,从文件中读取数据
{
node *head =(node*)malloc(sizeof(node));
int t;
node *p;
node *q;
p=q=head;
FILE * r= fopen("demo.txt","r");
if(r==NULL)
{
printf("打开文件失败!");
return NULL;
}

while(fscanf(r,"%d",&t)!=EOF)
{
q= (node*)malloc(sizeof(node));
q->data=t;
p->next=q;
p=q;
}
p->next=NULL;
return head;
}
//输出链表到屏幕和文件output.txt
void outlink(node *head)
{
node *p=head->next;
FILE *w =fopen("output.txt","w");
if(w==NULL)
{
printf("打开文件失败!");
return;
}
while(p)
{
//输出链表节点数据到屏幕
printf("%d ",p->data);
//输出链表节点数据到文件output.txt
fprintf(w,"%d ",p->data);
p=p->next;
}
printf("\n");
fprintf(w,"\n");
fclose(w);
return;
}
node *BubbleSort(node* head)//冒泡排序
{
node *p = head->next;
node *pnext;
int temp;
while( p->next!= NULL) //把小元素都放到前面
{
pnext = p->next;
while(pnext->next != NULL)
{
if(p->data>pnext->data)
{
temp = pnext->data;
pnext->data = p->data;
p->data = temp;
}
pnext = pnext->next;
}
if(p->data>pnext->data)
{
temp = pnext->data;
pnext->data = p->data;
p->data = temp;
}
p = p->next;
}
return head;
}
void locate(node *head,int a)  查找元素位置
{
node *p = head->next;
while(p->data != a)
{
p = p->next;
}
printf("The position is %p",p);
}
void insert(node* head,int a)  //插入元素
{
node *p = (node *)malloc(sizeof(node));
p->next = head->next;
head->next = p;
p->data = a;
}
void Delete(node *head,int a) // 删除元素
{
node *p = head;
node *q = head->next;
while(q->data!=a)
{
p = p->next;
q = q->next;
}
p->next = q->next;
free(q);
}
/* 单链表反转/逆序 */
node *ListReverse(node* L)
{
node *current,*pnext,*prev;
if(L == NULL || L->next == NULL)
return L;
current = L->next; /* p1指向链表头节点的下一个节点 */
pnext = current->next;
current->next = NULL;
while(pnext)
{
prev = pnext->next;
pnext->next = current;
current = pnext;
pnext = prev;
}
//printf("current = %d,next = %d \n",current->data,current->next->data);
L->next = current; /* 将链表头节点指向p1 */
return L;
}
时间: 2024-10-08 20:07:48

链表操作C语言实现的相关文章

静态链表的实现与操作(C语言实现)

我们知道要实现单链表,必须要有指针,那么像Java这样没有指针的的语言就略显蛋疼了. 没关系,我们有静态链表,其本质就是用采用数组的方式实现单链表的功能. 头文件: #ifndef _StaticLinkList_H_ #define _StaticLinkList_H_ typedef void StaticLinkList; typedef void StaticLinkListNode; StaticLinkList * StaticLinkList_Create(int capacity

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语言实现      说明:线性表是一种最简单的线性结构,也是最基本的一种线性结构,所以它不仅是学习中的重点,也是应用开发非常常用的一种数据结构.它可以分为顺序表和链表.它的主要操作是数据元素的插入,删除,以及排序等.接下来,本篇文章将对线性表链表的基本操作和运用进行详细的说明(包含在源代码的注释中),并给

树的实现与操作(C语言实现)

首先来简单说下一些关于的基本概念. 树是一种非线性的数据结构 1,树是由 n(n>=0)个结点组成的有限集合 如果n = 0 ,称为空树 如果n > 0,则: 有一个特定的称之为根(root)的结点,它只有直接后继,但没有直接前驱 除了根以外的其他结点划分为:m(m>=0)个互不相交的有限集合,T0,T1,T2-Tn-1,每个集合又是一棵树,并且称之为根的子树 2,树中的概念: 树的结点包括一个数据及若干指向子树的分支 结点拥有的子树树称为结点的度 度为0的结点称为叶结点 度不为0的结点

栈的实现与操作(C语言实现)

栈的定义  1, 栈是一种特殊的线性表  2,栈仅能在线性表的一端进行操作  3,栈顶(Top): 同意操作的一端 同意操作的一端  4,栈底(Bottom): ,不同意操作的一端 不同意操作的一端 这里我做出了 栈的顺序实现 和 链式实现.分别例如以下: =========================================华丽丽的切割线========================================================== 栈的顺序实现: 首先

双向链表的实现与操作(C语言实现)

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环链表. 单链表的局限 1,单链表的结点都只有一个指向下一个结点的指针 2,单链表的数据元素无法直接访问其前驱元素 3,逆序访问单链表中的元素是极其耗时的操作 双向链表的操作 双向链表的新操作 1,获取当前游标指向的数据元素 2,将游标重置指向链表中的第一个数据元素 3,将游标移动指向到链表中的下一个数据

循环链表的实现与操作(C语言实现)

循环链表是另一种形式的链式存贮结构.它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环. 循环链表的操作 1,循环链表的新操作 2, 获取当前游标指向的数据元素 3, 将游标重置指向链表中的第一个数据元素 4,将游标移动指向到链表中的下一个数据元素 5,直接指定删除链表中的某个数据元素 CircleListNode* CircleList_DeleteNode(CircleList* list, CircleListNode* node); CircleListNode*

无头结点的单链表(C语言)

1.单链表: 在顺序表中,用一组地址连续的存储单元来一次存放线性表的结点,因此结点的逻辑顺序与物理顺序是一致的.但链表却不同,链表是用一组任意的存储单元来存放 线性表的结点,这组存储单元可以是连续的,也可以是非连续的,甚至是零散分布在内存的任何位置上.因此,链表中结点的逻辑顺序与物理顺序不一定相同.为了正确表示节点间的逻辑关系,必须在存储线性表的每个数据元素的同时,存储指示其后继结点的地址信息,这两部分信息共同构成了单链表结点的结构,如下图: 结点包括两个域,数据域用来存放结点的值,指针域用来存

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

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