实验目的:
1.创建一个带头结点的单链表。
2.插入元素操作:将新元素x插入到单链表head的头部、将新元素x插入到单链表head的尾部、将新元素x插入到单链表head中第i个元素之后。
3.删除元素运算:删除单链表head中值为x的元素。
4.输出带头结点的单链表。
初始化链表:
使用malloc分配空间给*head、*p指针,创立一个带头结点的指针,然后定义一个用来开辟新节点的指针*s,使用malloc函数给他分配空间,并给用s->data给新结点的数值域赋值,再使用p->next=s将新结点连接到p的后面。
求表长:
定义一个整数变量i=0作为计数器,当p不等于NULL时,p指向后一个结点,同时n增加1,知道p等于NULL,跳出循环,返回n的值即为链表的长度。
查找元素:
从单链表的头结点开始,顺序逐个往后搜素,直到找到第i个结点,最后返回该结点的元素。
删除:
q指向要删除的那个元素所在结点的,p指向前驱结点,使用p->next=q->next语句删除。
头插法:
先指针*s为开辟一个新空间,将头结点head->next赋值给s->next;L->next赋值为s。
尾插法:
同样先指针*s为开辟一个新空间,先用while循环将p指到最后一个结点,使用p->next=s; s->next=NULL将新开辟的结点连接到尾结点。
退出程序:
使用exit(1)函数即可。
部分源代码如下:
/* Note:Your choice is C IDE */
#include "stdio.h"
#include<malloc.h>
#include<stdlib.h>
#define ElemType int
typedef struct node{
ElemType data;
struct node *next;
}slink ;
int i;
int l;
int v,x,t,y,u;
slink *creslink(){
slink *head;
slink *p;
slink *s;
int n=3;
int i;
printf("开始时先初始化链表了,请输入待会要赋值的五个值:\n");
p=head=(slink *)malloc(sizeof(slink));
for(i=1;i<=n;i++){
s=(slink *)malloc(sizeof(slink));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=NULL;
return head;
}
int insert(slink *head,int i,ElemType x){//任意位置插入
slink *p;
slink *q;
int j;
if(i<1){
return 0;
}
p=head;
j=0;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL){
return 0;}
q=(slink *)malloc(sizeof(slink));
q->data=x;
q->next=p->next;
p->next=q;
printf("%d",x);
return 1;
}
void toucha(slink *head){
slink *s;
int i;
printf("请输入要插入的元素");
for(i=1;i<=3;i++){
s=(slink *)malloc(sizeof(slink));
scanf("%d",&s->data);
s->next=head->next;
head->next=s;
}
}
void weicha(slink *head){
printf("请输入要插入的元素");
for(i=1;i<=3;i++){
slink *p,*s;
s=(slink *)malloc(sizeof(slink));
scanf("%d",&s->data);
p=head;
while(p->next!=NULL){
p=p->next;
}
p->next=s;
s->next=NULL;
}
}
版权声明:本文为m0_62107966原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。