单链表源代码(C语言版)
只实现了插入和删除;
[code=C/C++]
#include<stdio.h>
#include<stdlib.h>
//定义LNode结构体
typedef struct LNode{
int data;
struct LNode * next;
}LNode,*LinkList; //*LinkList 的用法:定义变量 LinkList L 等价于 struct LNode * L
//初始化单链表
void InitLink(LinkList L){
L->next=NULL;
}
//插入数据
void InsertLink(LinkList L,int i,int e){
LinkList p,s;
int j=0;
p=L;
while(p&&j<i-1){
p=p->next;
j++;
}
if(!p||i<j+1) //此处的i<j+1原本为严蔚敏书上的j>i-1,这样写是为了更加符合逻辑思维。两个表达式是指一样。下处同理。
exit(0);
s=malloc(sizeof(LNode));
s->next=p->next;
p->next=s;
s->data=e;
}
//删除数据
void DeleteLink(LinkList L,int i){
LinkList p,s;
int j=0;
p=L;
while(p->next &&j<i-1){
p=p->next;
j++;
}
if(!(p->next)||i<j+1)
exit(0);
s=p->next;
p->next=s->next;
free(s);
}
//打印单链表
void PrintLink(LinkList L){
LinkList p;
p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
//主函数
int main(){
LNode M;
int x,w,e,a;
InitLink(&M);
for(x=1;x<=12;x++){
InsertLink(&M,x,x);
}
PrintLink(&M);
printf("十二个节点的单链表已经建立\n\n");
printf("@@@@@@@@@@@@请输入操作序号:@@@@@@@@@@@@@\n");
printf("1:插入 2:删除 3:退出\n");
scanf("%d",&w);
while(w!=3){
switch(w){
case 1: printf("请输入要插入数据的位置和数值:");
scanf("%d%d",&a,&e);
InsertLink(&M,a,e);
PrintLink(&M);
break;
case 2: printf("请输入要删除数据的位置:");
scanf("%d",&a);
DeleteLink(&M,a);
PrintLink(&M);
break;
default : printf("操作有误,请重新输入:\n");
}
printf("@@@@@@@@@@@@请输入操作序号:@@@@@@@@@@@@@\n");
printf("1:插入 2:删除 3:退出\n");
scanf("%d",&w);
}
exit(0);
return 0;
}
[/code]
运行程序截图:
有问题可联系:xhsgg12302@outlook.com
2016-11-10