C语言 单链表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 单链表相关的知识,希望对你有一定的参考价值。

建立一个单链表,每个结点包括:学号,姓名和年龄 输入一个年龄,如果链表中的结点中年龄和输入的年龄相同,则将该节点删除 编写程序

建立链表,先输入一个要删除的节点的年龄,再输入每个节点的num,name,age直到输入的num是0时结束创建链表:
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct stu)
struct stu /*定义结构体*/
int num;
char name[10];
int age;
struct stu *next;
;
struct stu *creat() /*创建链表的函数,键盘输入数据,num为0时结束创建*/
struct stu *head;
struct stu *p1,*p2;
int n=0;
p1=p2=(struct stu *)malloc(LEN);
printf("input num name age:\n");
scanf("%d%s%d",&p1->num,&p1->name,&p1->age);
head=NULL;
while(p1->num!=0)
n=n+1;
if(n==1)
head=p1;
else p2->next=p1;
p2=p1;
p1=(struct stu *)malloc(LEN);
printf("input num name age:\n");
scanf("%d%s%d",&p1->num,&p1->name,&p1->age);

p2->next=NULL;
return head;

struct stu *clear(struct stu * head,int age) /*删除节点的函数*/
struct stu *p,*q;
int i=0;
p=head;
while(p!=NULL)
if(p->age==age)
i++;
if(p==head)
head=head->next;
free(p);
p=head;

else
q->next=p->next;
free(p);
p=q->next;


else
q=p;
p=p->next;

if(i==0)
printf("mei zhao dao\n");
return head;

void print(struct stu *head) /*输出链表的函数*/
struct stu *p;
p=head;
printf("the after is:\n");
do
printf("%d %s %d\n",p->num,p->name,p->age);
p=p->next;
while(p!=NULL);

void main()
struct stu *head;
int age;
printf("input age\n");
scanf("%d",&age); /*键盘键入要删掉的节点的age值*/
head=creat();
head=clear(head,age);
print(head);

希望能够帮到您。
参考技术A 虽然没分,当做做好事了,呵呵。
#include <iostream>
using namespace std;
struct Stu

char name[20];
int number;
int age;
struct Stu *next;
;

Stu *CrtStu()

Stu *head,*p,*s;
char ch;
head=new Stu;
s=head;
do

cout<<"请输入需要创建的学生信息"<<endl;
p=new Stu;
s->next = p;
cout<<"姓名:";
cin.getline(p->name,20);
cout<<"学号:";
cin>>p->number;
cout<<"年龄:";
cin>>p->age;
s = s->next;
cin.clear();
cin.sync();
cout<<"是否继续输入(Y/N)?";
cin>>ch;
cin.clear();
cin.sync();

while(ch!='N'&&ch!='n');
s->next=NULL;
return head;


void DelStu(Stu *head)

Stu *p,*s;
int n;
cout<<"请输入年龄,该年龄的学生信息将被删除!"<<endl;
cin>>n;
s=head;
p=p->next;
if(p==NULL)

cout<<"学生信息表没有任何数据!"<<endl;

else

while(p!=NULL && p->age != n)

s=p;
p=p->next;

if(p!=NULL)

s->next=p->next;
delete p;

else
cout<<"NOT found!"<<endl;



void ShowStu(Stu *head)

Stu *s;
s = head->next;
cout<<"姓名"<<" "<<"学号"<<" "<<"年龄"<<endl;
while(s !=NULL)

cout<<s->name<<" "<<s->number<<" "<<s->age<<endl;
s = s->next;



int main()

Stu *head;
head = CrtStu();
ShowStu(head);
DelStu(head);
ShowStu(head);
return 0;
本回答被提问者采纳
参考技术B #include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#define SIZE sizeof(struct node)
struct node
int data;
struct node *next;
;

void init(struct node *LC)

int n;
struct node *Str,*p;
p=(struct node *)malloc(SIZE);
Str=LC;
printf("请输入链表A,以小于零的数结束输入:\n");
scanf("%d",&n);
while(n>=0)
p->data=n;
Str->next=p;
Str=p;
p=(struct node *)malloc(SIZE);
scanf("%d",&n);
Str->next=NULL;

printf("您输入的序列的是:\n");
for (Str=LC->next;Str!=NULL;)
printf("%d ",Str->data);
Str=Str->next;

printf("\n");



void delet_LA(struct node *LA,struct node *pa)
struct node *p;
struct node *q;
p=LA;
q=p;
for (p;p!=pa;)
q=p;
p=p->next;

q->next=pa->next;



void delete_same(struct node *LA,struct node *LB)
struct node *pa,*pb;
pa=LA->next;
pb=LB->next;
for (pb;pb!=NULL;)
for (pa;pa!=NULL;)
if (pb->data==pa->data)
delet_LA(LA,pa);
pa=LA->next;

else
pa=pa->next;


pb=pb->next;
pa=LA->next;

printf("处理后的单链表A为:\n");
for (pa=LA->next;pa!=NULL;)
printf("%d ",pa->data);
pa=pa->next;



void main()
struct node *LA;
struct node *LB;
LA=(struct node *)malloc(SIZE);
if(LA!=NULL) LA->data=-1;
LB=(struct node *)malloc(SIZE);
if(LB!=NULL) LB->data=-1;
init(LA);
init(LB);
delete_same(LA,LB);
参考技术C 晕 就算是给你复制粘贴代码你也应该给点分儿啊 真抠门儿 随便找个数据结构的书 找下链表的删除 在删除的条件里边添加你自己要求的匹配条件(年龄相同) ok了 参考技术D 同意楼上的,你一点分也不给,还让我们辛辛苦苦给你编程序,你以为编个程序几分钟就变好了吗?先加个几十分的悬赏分再过来商量吧!

以上是关于C语言 单链表的主要内容,如果未能解决你的问题,请参考以下文章

C/C++语言数据结构快速入门(代码解析+内容解析)链表(单链表,双链表,循环链表,静态链表)

C/C++语言数据结构快速入门(代码解析+内容解析)链表(单链表,双链表,循环链表,静态链表)

c语言程序链表问题

单链表C语言实现附加力扣题

循环链表(循环单链表循环双链表)的相关操作的代码实现(C语言)

数据结构C语言版 —— 链表增删改查实现(单链表+循环双向链表)