链表操作,其实也不难,但也不是特别容易,重点是要弄清楚原理,原理弄清之后,然后初学者多画画草图,代码也不难写出来
具体操作见代码了呀~~
ps:本文的头插法是倒序插入的方,一般教材也是用倒序插入的方法
#include<bits/stdc++.h>
#define ERROR 0
#define OK 1
#define Status int
using namespace std;
typedef int Elementtype;
typedef struct Lnode{
Elementtype data;
struct Lnode *nxt;
}Lnode ,*Linklist;
Elementtype a[100];
///头插法
Linklist create_head(Elementtype a[],int n)
{
Linklist head;
head = (Linklist)malloc(sizeof(Lnode));
head->nxt=NULL;
for(int i=n-1;i>=0;i--){
Linklist q = (Linklist)malloc(sizeof(Lnode));
q ->data=a[i];
q->nxt=head->nxt;
head->nxt=q;
}
return head;
}
///尾插法
Linklist create_tail(Elementtype a[],int n)
{
Linklist head;
head = (Linklist)malloc(sizeof(Lnode));
head->nxt=NULL;
Linklist p = head;
for(int i=0;i<n;i++){
Linklist q = (Linklist)malloc(sizeof(Lnode));
q->data=a[i];
q->nxt=NULL;
p->nxt=q;
p=q;
}
return head;
}
///删除
Status delete_element(Linklist head,int i,int n)
{
Linklist p = head;
if(i>=n||i<0) return ERROR;
int j=0;
while(p!=NULL&&j<i){
j++;
p=p->nxt;
}
Linklist q = p->nxt;
p->nxt=q->nxt;
free(q);
return OK;
}
///插入
Status insert_element(Linklist head,int i,int n,int key){
Linklist p = head;
if(i>n||i<0) return ERROR;
int j=0;
while(p&&j<i){
j++;
p=p->nxt;
}
Linklist q = (Linklist)malloc(sizeof(Lnode));
q ->data=key;
q ->nxt=p->nxt;
p->nxt=q;
return OK;
}
///输出
void display(Linklist head){
Linklist p = head->nxt;
while(p){
printf("%d ",p->data);
p=p->nxt;
}
printf("\n");
}
int main(){
printf("请输入:\n");
for(int i=0;i<5;i++){
scanf("%d",&a[i]);
}
printf("输出如下:\n");
Linklist head = create_head(a,5);
display(head);
head = create_tail(a,5);
display(head);
int flag=delete_element(head,3,5);
if(flag){
display(head);
}
flag = insert_element(head,3,5,111);
if(flag){
display(head);
}
return 0;
}
然后输入输出下