#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}LNode,*LinkList;
//头插法
LinkList Creat_LinkList(){
LinkList H;
LNode *p;
H=(LinkList)malloc(sizeof(LNode));
H->next=NULL;
p=H;
int x,n;
scanf("%d",&n);
for(int i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&x);
p->data=x;
p->next=H->next;
H->next=p;
}
return H;
}
//尾插法
LinkList Creat_LinkList2(){
LinkList H=(LinkList)malloc(sizeof(LNode));
H->next=NULL;
LNode *s,*r=H;
int x,n;
scanf("%d",&n);
for(int i=0;i<n;i++){
s=(LinkList)malloc(sizeof(LNode));
scanf("%d",&x);
s->data=x;
r->next=s;
r=s;
}
r->next=NULL;
return H;
}
//求链表长度
int Length_LinkList(LinkList H){
int length;
LNode *p=H;
while(p->next!=NULL){
p=p->next;
length++;
}
return length;
}
//链表按序号查找
LinkList Get_LinkList(LinkList H,int k){
int i;
LNode *p=H;
while(p->next!=NULL && i<k){
p=p->next;
i++;
}
if(i==k)
return p;
else
return NULL;
}
//链表按值查找
LNode *Locate(LinkList H,int x){
LNode *p=H;
while(p->next!=NULL && p->data!=x)
p=p->next;
return p;
}
//链表插入
LinkList Insert_LinkList(LinkList H,int i,int x){
LNode *p,*q;
p=(LinkList)malloc(sizeof(LNode));
p=H;
int j;
while(p->next!=NULL && j<i){
p=p->next;
j++;
}
q=(LinkList)malloc(sizeof(LNode));
q->data=x;
q->next=p->next;
p->next=q;
return H;
}
//删除操作
LinkList Del_LinkList(LinkList H,int i){
LNode *p,*q;
int j;
p=(LinkList)malloc(sizeof(LNode));
p=H;
while(p->next!=NULL && j<i){
p=p->next;
j++;
}
p->next=q->next;
free(q);
return H;
}
//链表逆置
void Reverse(LinkList H){
LNode *p,*q;
p=H->next;
H->next=NULL;
while(p){
q=p;
p=p->next;
q->next=p->next;
H->next=q;
}
}
//链表输出
void print_LinkList(LinkList H){
LNode *p=H;
p=p->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
}
main()
{
LinkList h;
h=Creat_LinkList();
printf("头插法链表输出:");
print_LinkList(h);
printf("\n");
h=Creat_LinkList2();
printf("尾插法链表输出:");
print_LinkList(h);
}
C语言链表基本操作
最新推荐文章于 2025-04-02 20:29:50 发布