单链表简单的基本操作
还有待完善,希望提出意见
//类型描述
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define NULL 0
typedef int elemtp;
typedef struct node{
elemtp data;
struct node *next;
} linklist;
//新建单链表
linklist *creatlist(){
linklist *head,*p,*s;
elemtp x;
int i,j;
head=(linklist *)malloc(sizeof(linklist));
printf("输入单链表的长度:");
scanf("%d",&x);
p=head;
printf("输入单链表的数值:");
for(i=0;i<x;i++){
s=(linklist *)malloc(sizeof(linklist));
scanf("%d",&s->data);
p->next=s;
p=p->next;
}
p->next=NULL;
return head;
}
//向单链表中值为x的元素后插入值为Z的结点
void insert(linklist *p,elemtp x,elemtp z){
//在值为X的元素后插入值Z的结点
linklist *q,*s;
q=p->next;
while(q!=NULL){
if(q->data==x){
s=(linklist *)malloc(sizeof(linklist));
s->data=z;
s->next=q->next;
q->next=s;
break;
}
q=q->next;
}
}
//删除单链表中值为d的结点
void delet(linklist *p,elemtp d){
linklist *q;
q=p->next;
while(q!=NULL){
if(q->data==d){
p->next=q->next;
break;
}
q=q->next;
p=p->next;
}
}
//打印单链表
void print(linklist *p){
linklist *q;
q=p->next;
while(q!=NULL){
printf("%d ",q->data);
q=q->next;
}
printf("\n");
}
//主函数
int main(){
linklist *p,*q;
elemtp x,z,d,n,m,o,v;
p=creatlist();
printf("输出单链表:");
print(p);
printf("输入元素和元素后插入的元素:");
scanf("%d%d",&n,&m);
printf("输出插入新的元素的单链表:");
insert(p,n,m);
print(p);
printf("输入删除的元素:");
scanf("%d",&o);
printf("输出删除后的单链表:");
delet(p,o);
print(p);
}
结果:
知识点:
- 1.对线性表的操作:增、删、改、查;
- 2.判断线性表的结束------>NULL;
- 3.conio函数的定义:
- 4.malloc函数的定义:
- 5.删除的示意图
- 4.插入的示意图
(a)插入前 (b) 插入后