精华内容
下载资源
问答
  • 添加一个节点,程序检查了好几遍实在看不出来错误,求大神指点!! <code>#include<stdio.h> #include<stdlib.h> struct node{ int id,mpoints; struct node *next; }; int...
  • C语言链表操作

    2018-04-12 21:12:35
    通过c语言实现了链表的基础操作,有创建链表添加节点,删除节点,链表中元素的比较,计算链表的长度等操作
  • C语言链表

    2018-12-03 15:45:00
    C语言链表包含(创建,添加,删除,修改当前结点值,判断节点是否存在,返回某位置节点值)这些算法。 下面分别是这些算法的实现思想和方式: 创建算法: struct List*Create(){int n; //通过输入链表个数来...

    本C语言链表包含(创建,添加,删除,修改当前结点值,判断节点是否存在,返回某位置节点值)这些算法。

    下面分别是这些算法的实现思想和方式:

    创建算法:

    struct List*Create(){
    int n;                  //通过输入链表个数来控制链表输入的结束
    cout<<"请输入链表个数:";
    scanf("%d",&n);
    struct List*build;             //用来申请空间来创建每个节点
    struct List*head;             //用来指向第一个链表节点(也就是第一个build节点,因为每次创建节点之后build就会发生改变)
    struct List*tail;              //配合build来创建节点
    int t=1;
    cout<<"请依次输入链表的数值:";
    build=(struct List*)malloc(sizeof(struct List));   //其实这部分和while循环的内容是相同的。将这部分单独放在外面的原因是为是head指向第一个build节点,使head不随循环的改变而改变。
    scanf("%d",&(build->Data));        
    build->next=NULL;
    head=build;
    tail=build;
    while(t<n){                //while循环部分
    build=(struct List*)malloc(sizeof(struct List));
    scanf("%d",&(build->Data));
    build->next=NULL;
    tail->next=build;
    tail=build;
    t++; 
    }

     

    添加,删除,修改当前结点值,判断节点是否存在,返回某位置节点值这些算法:

    修改当前结点值,判断节点是否存在这两个算法只需控制指针不断前进即可

    while(p!=NULL&&(p->Data!=key)){
    p=p->next;
    n++; 
    }

    添加,删除这两个算法主要的思想就是找到需要操作的节点位于第几项。利用while循环去寻找。

    关键点在于需要两个指针,一个指针p指向链表头节点,另一个指针p1为指针p的前驱结点。

    while(t<=n){
    p1=p;
    p=p->next;
    t++;

     

    以下是完整的代码:

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    struct List{
    int Data;
    struct List*next;
    };
    //创建链表
    struct List*Create(){
    int n;
    cout<<"请输入链表个数:";
    scanf("%d",&n);
    struct List*build;
    struct List*head;
    struct List*tail;
    int t=1;
    cout<<"请依次输入链表的数值:";
    build=(struct List*)malloc(sizeof(struct List));
    scanf("%d",&(build->Data));
    build->next=NULL;
    head=build;
    tail=build;
    while(t<n){
    build=(struct List*)malloc(sizeof(struct List));
    scanf("%d",&(build->Data));
    build->next=NULL;
    tail->next=build;
    tail=build;
    t++;
    }
    return head;
    }
    //输出函数
    void output(struct List*print){
    while(print!=NULL){
    cout<<print->Data<<'-'<<'>';
    print=print->next;
    }
    cout<<endl;
    }
    //查找函数
    void Find(struct List*find){
    int n=1,key;
    cout<<"请输入要查找的元素:";
    scanf("%d",&key);
    struct List*p=find;
    while(p!=NULL&&(p->Data!=key)){
    p=p->next;
    n++;
    }
    if(p==NULL) cout<<"不存在要查找的数 ";
    else printf("要查找的数位于%d位 ",n);
    }
    //添加函数
    struct List*Add(struct List*add){
    int t=1,n,need;
    cout<<"请输入要添加的元素:";
    scanf("%d",&need);
    cout<<"请输入添加的位置:";
    scanf("%d",&n);
    struct List*head=add;
    struct List*p=add;
    struct List*p1=NULL;
    while(t<=n){
    p1=p;
    p=p->next;
    t++;
    }
    struct List*addition;
    addition=(struct List*)malloc(sizeof(struct List));
    addition->Data=need;
    p1->next=addition;
    addition->next=p;
    cout<<"插入后的链表为";
    cout<<endl;
    output(add);
    return head;
    }
    //删除函数
    struct List*Delete(struct List*rubbish){
    int key;
    struct List*q;
    cout<<"请输入要删除的数:";
    scanf("%d",&key);
    struct List*head=rubbish;
    struct List*p1=rubbish;
    struct List*p2=NULL;
    while(p1!=NULL&&(p1->Data!=key)){
    p2=p1;
    p1=p1->next;
    }
    if(p1==NULL) cout<<"未找到要删除的数";
    else{
    q=p1;
    p2->next=p1->next;
    p1=p1->next;
    free(q);
    }
    cout<<"删除后的链表为:";
    cout<<endl;
    output(rubbish);
    return rubbish;
    }
    //修改当前结点的值
    void Set(struct List*fix){
    int t=1,n,item;
    cout<<"请输入要修改节点的位置:";
    cin>>n;
    cout<<"请输入修改后的节点值: ";
    cin>>item;
    struct List*p=fix;
    struct List*p1=NULL;
    while(t<=n){
    p1=p;
    p=p->next;
    t++;
    }
    p1->Data=item;
    cout<<"修改节点之后的链表为:";
    cout<<endl;
    output(fix);
    }
    //返回当前节点的值
    int Return(struct List*value){
    int t=1,n;
    cout<<endl;
    cout<<"请输入要返回节点的位置:";
    cout<<endl;
    cin>>n;
    struct List*p=value;
    struct List*p1=NULL;
    while(t<=n){
    p1=p;
    p=p->next;
    t++;
    }
    cout<<"当前的节点值为:"<<p1->Data;
    return p1->Data;
    }
    //主函数
    int main(){
    int i;
    struct List*create=Create();
    cout<<"1.插入元素";
    cout<<endl;
    cout<<"2.删除元素";
    cout<<endl;
    cout<<"3.修改元素";
    cout<<endl;
    cout<<"4.查找结点";
    cout<<endl;
    cout<<"5.返回当前节点";
    cout<<endl;
    cout<<"6.结束";
    cout<<endl;
    while(1){
    cout<<"your choice:";
    cin>>i;
    switch(i){
    case(1):{
    Add(create);
    break;
    }
    case(2):{
    Delete(create);
    break;
    }
    case(3):{
    Set(create);
    break;
    }
    case(4):{
    Find(create);
    break;
    }
    case(5):{
    Return(create);
    break;
    }
    case(6):return 0;
    }
    }
    }

    转载于:https://www.cnblogs.com/xiaoshuita/p/10058893.html

    展开全文
  • 怎么用C语言在一个文件后面添加内容怎么用C语言在一个文件后面添加内容 使用fopen函数打开文件,用fseek函数将文件位置调整到文件末尾,然后用fwrite函数写入数据即可。下面的示例代码,向1.txt的文件中追加hello ...

    怎么用C语言在一个文件后面添加内容

    怎么用C语言在一个文件后面添加内容 使用fopen函数打开文件,用fseek函数将文件位置调整到文件末尾,然后用fwrite函数写入数据即可。下面的示例代码,向1.txt的文件中追加hello world的字符串。 #include #include int main() { FILE *fp = fope

    请问C语言中,如何把一个字母加在一个字符串末尾?

    301940540644f8fa8957f00fa8659d57.png

    例如 char text[] = {"Hello"}; char c = 'a' 如何使text成为"Helloa"?

    C语言 文件操作 如何末尾追加内容?我想要做得就是如果123.dat不存在则新建一个,如果存在就在文件末尾追加以“ab”的方式打开一个文件,就表明你是要从文件末尾开始写东西。

    如何用C语言在txt的末尾增加数据?

    比如,原来的txt内容是: kk 99 11 现在输入888,txt要变成: kk 99 11 888

    在C语言程序中,若要向文件末尾添加新的数据,则应以A."r" B."w" C."a" D."rb"

    C语言怎样在文件中每行的末尾写入数据?

    C语言在数组后面添加结束符'\0'的小问题~

    关于c语言数组 如何在一个数组尾部添加新的元素?C语言本身没有直接的动态数组, 自己可以写个库函数和方法来实现,说的在直接点就是用链表来实现动态数组了,数组的申请, 扩充, 回收 都要自己写处理方法

    c语言怎么在数组最后再加一些数据

    很简单利用C语言中的动态数组就可以搞定 举个例子 #include #include #include #include int main(){srand((unsigned)time(NULL));int n;int new_number;printf("please input a number:\n");scanf("%d",&n);int *p = (int *)malloc(n*sizeof(in

    C语言 在链表尾部添加节点

    现在我有一个链表 要写函数newlast(point *p,int i)(在指针p所指链表尾加分了 #include #include class point //节点类 { public: int a; //节点值 point *next; //next指针 }; void newlast(point *&p,int i) //在*p所指的链表的最后新建一个值为i的节点 { point *q,*o; q=p; while(q->next) { q=q->next; } printf

    展开全文
  • 链表的尾部动态添加节点,添加信息包括图书编号和价格。 //下面是动态添加节点的完整c代码(直接复制粘贴到main.c中就可以运行) #include<stdio.h> #include<stdlib.h> typedef struct book { int num...

    在链表的尾部动态添加节点,添加信息包括图书编号和价格。

    //下面是动态添加节点的完整c代码(直接复制粘贴到main.c中就可以运行)
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct book
    {
    	int num;				//图书编号
    	float price;			//图书价格
    	struct book *next;		//指向下一个节点的指针
    }Book;
    Book *head=NULL;			//初始化头指针为空
    int n=0;					//总节点数目
    
    //动态添加节点
    void Create()
    {
    	Book *p=NULL;				//用于遍历链接
    	Book *p_new=NULL;			//存储新节点的地址
    	Book *p_old=NULL;			//存储尾节点的地址
    	int num;				//接收用户输入的编号
    	if (head!=NULL)
    	{
    		p=head;
    		while (p!=NULL)
    			p=p->next;
    		p_old=p;			//循环到结束时,将尾节点地址保存
    	}
    	while (1)
    	{reInput:
    		printf("请输入图书编号,按0结束:");
    		scanf("%d",&num);
    		if (num==0)
    		{
    			getchar();		//抛弃多余的Enter键
    			break;
    		}
    		p=head;				//获得头指针,用于遍历
    		while (p!=NULL)
    		{
    			if (p->num==num)
    			{
    				printf("编号重复,请重新输入。\n");
    				goto reInput;
    			}
    			p=p->next;		//取下一个节点的地址
    		}
    		p_new=(Book*)malloc(sizeof(Book));	//创建新节点
    		p_new->num=num;		//保存编号
    		n++;				//总节点数+1
    		if (n==1)
    		{
    			head=p_new;
    		}
    		else
    		{
    			p_old->next=p_new;
    		}
    		p_old=p_new;
    		p_new->next=NULL;
    		printf("请输入图书价格:");
    		scanf("%f",&p_new->price);
    	}
    }
    
    //显示所有节点数据
    void Show()
    {
    	Book *p;
    	p=head;
    	if (p==NULL)
    	{
    		printf("没有图书信息。\n");
    		return;
    	}
    	printf("图书编号\t图书价格\n");
    	while (p!=NULL)
    	{
    		printf("%d\t\t%.2f\n",p->num,p->price);
    		p=p->next;
    	}
    }
    int main()
    {
    	Create();//动态添加节点
    	Show();//显示所有节点数据
    	return 0;
    }
    
    
    展开全文
  • #include<stdio.h> #include<stdlib.h> //节点结构体 struct Node{ int m; struct Node* pNext; }; //链表头尾指针 struct Node* g_pHead = ...//创建链表,在链表中增加一个数据 头添加 void A...
    #include<stdio.h>
    #include<stdlib.h>
    //节点结构体 
    struct Node{
    	int m;
    	struct Node* pNext;
    }; 
    //链表头尾指针 
    struct Node* g_pHead = NULL;
    struct Node* g_pEnd = NULL;
    //创建链表,在链表中增加一个数据 头添加 
    void AddNodeHead(int m)
    {
    //创建一个节点 
    struct Node* pTemp = (struct Node*)malloc(sizeof(struct Node));
    //节点数据赋值 
    pTemp->m = m;
    pTemp->pNext = NULL;
    //接在链表上 
    if(NULL == g_pHead)
    {
    	//链表为空,新节点既是头又是尾巴 
    	g_pHead = pTemp;
    	g_pEnd = pTemp;
    }
    else
    {
    	//新节点的下一个指向头 
    	pTemp->pNext = g_pHead;
    	//新节点就是头了 
    	g_pHead = pTemp;
    }
    }
    int main(void)
    {
    	g_pHead;
    	AddNodeHead(1);
    	AddNodeHead(2);
    	AddNodeHead(3);
    	AddNodeHead(4);
    	AddNodeHead(5);
    	system("pause");
    	
    }
    //主函数的第二种写法 
    /*int main(void)
    {
    	int a[10]={1,2,3,4,5,6,7,8,9,10};
    	g_pHead;
    	int i=0;
    	for(i=0;i<10;i++)
    	{
    		AddNodeHead(a[i]);
    	}
     }*/ 
    
    展开全文
  • 本文实例为大家分享了C语言链表实现歌手评分系统的具体代码,供大家参考,具体内容如下 此程序可以添加文件操作用于保存歌手得分等信息,此程序实现了链表的增删查和链表冒泡排序交换节点功能 #include #include ...
  • 例:在2之前插入15 #include<stdio.h> #include<...//节点结构体 struct Node { int a; struct Node* pNext; }; //链表头尾指针 struct Node* g_pHead = NULL; struct Node* g_pEn...
  • C语言链表指针问题

    2021-01-21 21:58:18
    C语言链表指针问题 项目场景: 最近在学习数据结构,自己尝试用C语言自己来完成,在书写的过程中发现了一些问题 环境: win10的linux子系统Ubuntu18.04 gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 问题描述: ...
  • #include<stdio.h> #include<stdlib.h> //节点结构体 struct Node{ int m; struct Node* pNext; }; //链表头尾指针 struct Node* g_pHead = ...//创建链表,在链表中增加一个数据(尾添加) void ...
  • C语言链表初试

    2018-12-06 15:30:05
    // DataLink.cpp : 定义控制台应用程序的入口点。 // #include “stdafx.h” #include &amp;amp;lt;stdlib.h&amp;amp;gt; typedef int DATA;...//链表添加节点 void AddHead(DATA dat...
  • 因为今天小编就要为大家介绍一下:在C语言中单向链表环测试并返回环起始节点的实现方法。原始方法:就刚刚小编所提出的问题,也许会有朋友想到了一个非常原始的方法,那就是将链表的数据结构进行改变,然后给每一个...
  • C语言链表基本操作

    2021-04-23 17:44:22
    1.链表概述 ...在链表中有一个头指针变量,这个指针变量保存一个地址,通过这个地址来找到这个链表,头指针节点指向第一个节点,在链表中每个节点包含两个部分:数据部分和指针部分。虽然结构体不能含有与本
  • #include<stdio.h> #include<stdlib.h> //节点结构体 struct Node { int a; struct Node* pNext; }; //链表头尾指针 struct Node* g_pHead = ...//创建链表,在链表中增加一个数据(尾添加) vo...
  • 链表实现通讯录功能: 1.添加–(输入 姓名,电话) 2.删除-- (输入人名,删除该人) 3.查询-- (直接打印所有联系人) ...//链表节点 typedef struct Node { char name[10];//名字 char data[12];//电话 str
  • #include<stdio.h> #include<stdlib.h> //节点结构体 struct Node { int a; struct Node* pNext; }; //链表头尾指针 struct Node* g_pHead = ...//创建链表,在链表中增加一个数据(尾添加) vo...
  • 这篇文章主要为大家详细介绍了C语言链表实现歌手评分系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,本文实例为大家分享了C语言链表实现歌手评分系统的具体代码,供大家参考,具体内容如下: 下面是小编...
  • #include<stdio.h> #include<...//节点结构体 struct Node { int a; struct Node* pNext; }; //链表头尾指针 struct Node* g_pHead = NULL; struct Node* g_pEnd = NULL; ...
  • #include<stdio.h> #include<...//节点结构体 struct Node { int a; struct Node* pNext; }; //链表头尾指针 struct Node* g_pHead = NULL; struct Node* g_pEnd = NULL; ...
  • c语言链表的增删改查–简单的学生管理系统 利用链表写成的学生管理系统,有增删改查基础操作。 注释大都写在代码里 下面展示全部代码,因为英语不是很好,大部分英语语句为拼凑而成。 链表的控制界面都写在user_face...
  • C语言链表小管理系统

    2010-06-05 16:30:27
    学习完聊表后写的小程序,包含了节点添加,删除,查找!
  • 实现了单链表的基本操作,包括:节点的创建、添加、插入、删除、遍历、翻转。 代码 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;...
  • 链表中插入节点C语言实现)

    千次阅读 2020-07-15 17:45:09
    不同位置插入数据2.1 在DLL的前端添加节点2.2 在给定节点之前添加节点2.3 在DLL的末尾添加节点2.4 在给定节点之后添加节点3. 综合示例参考文献 1. 相关背景介绍 1.1 双链表概念     相比SLL(singly linked ...
  • C语言实现双向列表的创建,删除,添加节点,删除节点,插入节点,遍历节点,打印节点,并结合插入排序法实现了基于双向链表的升序排序。
  • 静态链表的增删链表节点数统计说明更新记录 什么是数据结构? 数据结构就是研究数据的逻辑结构和物理结构以及它们之间的相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后得到的新的结构体仍然是原来...
  • C语言~链表

    2019-08-25 15:08:49
    有一种存储方式,其存储元素的个数是不受限定的,当进行添加元素时存储的个数就会随之改变,这种存储方式就是链表链表是一种常见的数据结构。 在链表中每一个元素包括数据部分和指针部分。数据部分用来存放元素所...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 168
精华内容 67
关键字:

c语言链表添加节点

c语言 订阅