#include "stdio.h"
#include "stdlib.h"
#define N sizeof(struct node)
//链表结构体
typedef struct node{
struct node *next;
int data;
}*pnode;
//条件创建链表(头插)
pnode create1(){
pnode head,p,q;
p=q=(pnode)malloc(N);
q=NULL;
scanf("%d",&p->data);
while(p->data!=0){
p->next=q;
q=p;
p=(pnode)malloc(N);
scanf("%d",&p->data);
}
head=q;
return head;
}
//条件创建链表(尾插)
pnode create2(){
pnode head,p,q;
p=q=(pnode)malloc(N);
head=NULL;
q->next=NULL;
scanf("%d",&p->data);
while(p->data!=0){
if(head==NULL)
head=p;
else
q->next=p;
q=p;
p=(pnode)malloc(N);
scanf("%d",&p->data);
}
q->next=NULL;
return head;
}
//链表的循环(头插)
pnode precreate(int n){
pnode p,head,q;
q=(pnode)malloc(N);
q=NULL;
int i;
for(i=1;i<=n;i++)
{
p=(pnode)malloc(N);
scanf("%d",&p->data);
p->next=q;
q=p;
}
head=q;
return head;
}
//链表的循环(尾插)
pnode aftcreate(int n){
pnode head,p,q;
q=(pnode)malloc(N);
head=NULL;
int i;
for(i=1;i<=n;i++)
{
p=(pnode)malloc(N);
scanf("%d",&p->data);
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
q->next=NULL;
return head;
}
//链表的插入节点
pnode insert(pnode head,int k){
pnode p,q;
p=q=(pnode)malloc(N);
p=head;
while(p->data!=k){
p=p->next;
}
if(p->data==k)
{
printf("请输入你想插入的数据:\n");
scanf("%d",&q->data);
q->next=p->next;
p->next=q;
}
else
printf("链表中不存在这个数:\n");
return head;
}
//链表的修改节点
pnode alter(pnode head,int m)
{
pnode p;
p=(pnode)malloc(N);
p=head;
while(p->data!=m)
{
p=p->next;
}
if(p->data==m)
{
printf("请输入你想修改为什么数:\n");
scanf("%d",&p->data);
}
else
printf("链表中不存在这个数据!\n");
return head;
}
//链表之删除节点
pnode del(pnode head,int a)
{
pnode p,q;
p=q=(pnode)malloc(N);
p=head;
while(p->data!=a)
{
q=p;
p=p->next;
}
if(p->data==a)
{
q->next=p->next;
free(p);
}
else
printf("在链表中没有找到这个数据!\n");
return head;
}
//链表之遍历节点
void show(pnode head)
{
pnode p;
p=(pnode)malloc(N);
p=head;
if(p==NULL)
printf("链表为空");
else
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
//计算链表的节点
int sum(pnode head)
{
pnode p;
int j=0;
p=(pnode)malloc(N);
p=head;
while(p!=NULL)
{
p=p->next;
j++;
}
return j;
}
int main()
{
pnode head;
int n,k,m,a,i;
do{
printf("********************************************\n");
printf("1.条件头插创建链表输入0结束\n2.条件尾插创建链表输入0结束\n3,循环头插创建链表\n4.循环尾插创建链表\n");
printf("5.插入节点\n6.修改节点\n7.删除节点\n8.遍历节点\n9.节点的计算\n10.退出程序\n");
printf("********************************************\n");
printf("请输入你的选择:\n");
scanf("%d",&i);
switch(i){
case 1:
printf("请输入你想输入链表的数据:\n");
head=head=create1();
break;
case 2:
printf("请输入你想输入链表的数据:\n");
head=create2();
break;
case 3:
printf("循环创建链表请输入创建链表的节点数:\n");
scanf("%d",&n);
head=precreate(n);
break;
case 4:
printf("循环创建链表请输入创建链表的节点数:\n");
scanf("%d",&n);
head=aftcreate(n);
break;
case 5:
printf("请输入你想在那个数据后面插入数据;\n");
scanf("%d",&k);
insert(head,k);
break;
case 6:
printf("请输入你想修改哪一个数据!\n");
scanf("%d",&m);
alter(head,m);
break;
case 7:
printf("请输入你想删除的数据:\n");
scanf("%d",&a);
del(head,a);
break;
case 8:
show(head);
break;
case 9:
printf("链表的节点个数为%d\n",sum(head));
break;
case 10:
break;
}
}while(i!=10);
return 0;
}
#include "stdlib.h"
#define N sizeof(struct node)
//链表结构体
typedef struct node{
struct node *next;
int data;
}*pnode;
//条件创建链表(头插)
pnode create1(){
pnode head,p,q;
p=q=(pnode)malloc(N);
q=NULL;
scanf("%d",&p->data);
while(p->data!=0){
p->next=q;
q=p;
p=(pnode)malloc(N);
scanf("%d",&p->data);
}
head=q;
return head;
}
//条件创建链表(尾插)
pnode create2(){
pnode head,p,q;
p=q=(pnode)malloc(N);
head=NULL;
q->next=NULL;
scanf("%d",&p->data);
while(p->data!=0){
if(head==NULL)
head=p;
else
q->next=p;
q=p;
p=(pnode)malloc(N);
scanf("%d",&p->data);
}
q->next=NULL;
return head;
}
//链表的循环(头插)
pnode precreate(int n){
pnode p,head,q;
q=(pnode)malloc(N);
q=NULL;
int i;
for(i=1;i<=n;i++)
{
p=(pnode)malloc(N);
scanf("%d",&p->data);
p->next=q;
q=p;
}
head=q;
return head;
}
//链表的循环(尾插)
pnode aftcreate(int n){
pnode head,p,q;
q=(pnode)malloc(N);
head=NULL;
int i;
for(i=1;i<=n;i++)
{
p=(pnode)malloc(N);
scanf("%d",&p->data);
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
q->next=NULL;
return head;
}
//链表的插入节点
pnode insert(pnode head,int k){
pnode p,q;
p=q=(pnode)malloc(N);
p=head;
while(p->data!=k){
p=p->next;
}
if(p->data==k)
{
printf("请输入你想插入的数据:\n");
scanf("%d",&q->data);
q->next=p->next;
p->next=q;
}
else
printf("链表中不存在这个数:\n");
return head;
}
//链表的修改节点
pnode alter(pnode head,int m)
{
pnode p;
p=(pnode)malloc(N);
p=head;
while(p->data!=m)
{
p=p->next;
}
if(p->data==m)
{
printf("请输入你想修改为什么数:\n");
scanf("%d",&p->data);
}
else
printf("链表中不存在这个数据!\n");
return head;
}
//链表之删除节点
pnode del(pnode head,int a)
{
pnode p,q;
p=q=(pnode)malloc(N);
p=head;
while(p->data!=a)
{
q=p;
p=p->next;
}
if(p->data==a)
{
q->next=p->next;
free(p);
}
else
printf("在链表中没有找到这个数据!\n");
return head;
}
//链表之遍历节点
void show(pnode head)
{
pnode p;
p=(pnode)malloc(N);
p=head;
if(p==NULL)
printf("链表为空");
else
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
//计算链表的节点
int sum(pnode head)
{
pnode p;
int j=0;
p=(pnode)malloc(N);
p=head;
while(p!=NULL)
{
p=p->next;
j++;
}
return j;
}
int main()
{
pnode head;
int n,k,m,a,i;
do{
printf("********************************************\n");
printf("1.条件头插创建链表输入0结束\n2.条件尾插创建链表输入0结束\n3,循环头插创建链表\n4.循环尾插创建链表\n");
printf("5.插入节点\n6.修改节点\n7.删除节点\n8.遍历节点\n9.节点的计算\n10.退出程序\n");
printf("********************************************\n");
printf("请输入你的选择:\n");
scanf("%d",&i);
switch(i){
case 1:
printf("请输入你想输入链表的数据:\n");
head=head=create1();
break;
case 2:
printf("请输入你想输入链表的数据:\n");
head=create2();
break;
case 3:
printf("循环创建链表请输入创建链表的节点数:\n");
scanf("%d",&n);
head=precreate(n);
break;
case 4:
printf("循环创建链表请输入创建链表的节点数:\n");
scanf("%d",&n);
head=aftcreate(n);
break;
case 5:
printf("请输入你想在那个数据后面插入数据;\n");
scanf("%d",&k);
insert(head,k);
break;
case 6:
printf("请输入你想修改哪一个数据!\n");
scanf("%d",&m);
alter(head,m);
break;
case 7:
printf("请输入你想删除的数据:\n");
scanf("%d",&a);
del(head,a);
break;
case 8:
show(head);
break;
case 9:
printf("链表的节点个数为%d\n",sum(head));
break;
case 10:
break;
}
}while(i!=10);
return 0;
}

这篇博客详细介绍了如何使用C语言实现链表的各种操作,包括条件头插创建链表、条件尾插创建链表、循环头插创建链表、循环尾插创建链表、插入节点、修改节点、删除节点以及遍历节点。通过示例代码展示了每个操作的具体实现步骤。


被折叠的 条评论
为什么被折叠?



