标题在这里插入代码片
利用C语言创建数据结构中链表的遍历及其基本操作 【经典程序|利用C语言创建数据结构中链表的遍历及其基本操作】笔者希望此程序希望对学数据结构或者C的朋友们提供帮助!
如有更完美的程序,请在评论区留下您宝贵的意见,咱们一起讨论,学习进步!!!
程序:
#include"stdio.h"
#include"malloc.h"
typedef struct stu//自定义链表结点数据类型名ST和指针类型名*STU
{
char name[20];
//数据域
int score;
struct stu *next;
//结点指针域
}ST,*STU;
STU jianli(int n)//建立一个由n个结点构成的单链表函数,返回结点指针类型
{
int i;
STU p,q,head;
if(n<=0)
{
return(NULL);
}
head=(STU)malloc(sizeof(ST));
//生成第一个结点
printf("input datas:\n");
//请输入数据
scanf("%s %d",head->name,&head->score);
p=head;
//p作为连接下一个结点q的指针
for(i=1;
iname,&q->score);
p->next=q;
//连接q结点
p=q;
//p跳到q上,在准备连接下一个结点q
}
p->next=NULL;
//置尾结点指针域为空指针
return(head);
//将已经建立起来的单链表头指针返回
}void print(STU head)//链表的输出
{
STU p=head;
//从头指针出发,依次输出,直到遇到NULL结束
while(p!=NULL)
{
printf("%s\t%d\n",p->name,p->score);
p=p->next;
//p指针顺序后移一个结点
}
}
STU charu(STU head,int i)//插入结点
{
STU s,p,q;
int j=0;
//查找第i个结点计数用
if(i<0)
{
return NULL;
//参数i的值不合理
}
s=(STU)malloc(sizeof(ST));
printf("input new node datas:");
scanf("%s %d",s->name,&s->score);
if(i==0)//i==0表明是在第一个结点之前插入新结点
{
s->next=head;
//把头地址赋给s的指针域
head=s;
//把s结点赋给head
return(head);
}
q=head;
//查找新结点的位置,在p和q之间
while(jnext;
//把q的下一个结点赋给q
}
if(jnext=s;
//把插入的结点地址赋给p,(连接结点)
s->next=q;
//把q最终的地址赋给s的指针域
return(head);
}
STU deletenodel(STU head,int i)
{
STU s,p;
int j;
if(i<1)
return NULL;
//i<1不合理
if(i==1)//要删除的结点是链表中的第一个结点
{
if(head!=NULL)
{
s=head;
head=s->next;
free(s);
}
return(head);
}
s=head->next;
//查找第i个结点的位置,以s标记
p=head;
j=2;
//从第二个结点开始
while(jnext;
}
if(jnext=s->next;
//摘除s结点
free(s);
//回收已释放的结点
return(head);
}main()
{
STU h;
int n,i;
printf("input number of node:");
//请输入结点个数
scanf("%d",&n);
h=jianli(n);
//调用建立单链表的函数,返回值(指针)赋给h
print(h);
//调用输出链表的函数
printf("是否需要插入新的结点?\n是请按“1”\t否请按“0”\n");
int x;
scanf("%d",&x);
if(x==1)
{
printf("input new node number:");
//输入新结点
scanf("%d",&i);
h=charu(h,i);
//调用插入函数,并将返回值(指针)赋值给h
print(h);
}
printf("是否需要删除结点?\n是请按“1”\t否请按“0”\n");
int y;
scanf("%d",&y);
if(x==1)
{
printf("which node you want delete:");
scanf("%d",&i);
h=deletenodel(h,i);
//调用输出链表的函数,并将返回值(指针)赋值给h
print(h);
}
return 0;
}
推荐阅读
- 数据结构|数据结构之单链表的实现(Java版本)
- 数据结构与算法|4 单循环链表解决约瑟夫问题
- 数据结构|数据结构(循环链表解决约瑟夫问题)
- C++|基于QT实现简单的TCP通信
- C语言|C语言求水仙花数
- C语言|C语言求输入字符的字母和数字个数
- QT|QT实现TCP通信
- 菜鸟刷题|蓝桥杯每日一题——最大字段和问题(动态规划)
- 算法|leetcode378. 有序矩阵中第 K 小的元素