一、代码
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
void init(LinkList &L); //初始化
void create(LinkList &L); //创建
void insert(LinkList &L); //插入
void outlin(LinkList &L); //输出
void deleter(LinkList &L); //删除
void nizi(LinkList &L); //逆置
int main(){
int cord;
LinkList L;
do
{
printf("\n 主菜单\n");
printf(" 1 初始化一个空单链表\n");
printf(" 2 建立n个结点的单链表\n");
printf(" 3 插入一个元素\n");
printf(" 4 删除一个元素\n");
printf(" 5 单链表的逆置\n");
printf(" 6 结束程序\n");
printf("-------------------------\n");
printf("请输入您的选择(1,2,3,4,5,6) :");
scanf("%d",&cord);
switch(cord)
{
case 1:
{
init(L); //初始化链表L
outlin(L);
}break;
case 2:
{
create(L);
outlin(L);
}break;
case 3:
{
insert(L);
outlin(L);
}break;
case 4:
{
deleter(L);
outlin(L);
}break;
case 5:
{
nizi(L);
outlin(L);
}break;
case 6:exit(0);
}
}while(cord<=6);
return 0;
}
void init(LinkList &L){
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
printf("\n表创建成功\n");
system("pause");
}
void create(LinkList &L){
int i,n;
Lnode *r,*p;
r=L;
printf("\n请输入要插入的个数n=");
scanf("%d",&n);
printf("\n请输入要插入的元素:\n");
for(i=0;i<n;++i){
p=(LinkList)malloc(sizeof(Lnode));
printf("data%d=",i+1);
scanf("%d",&p->data);
p->next=NULL;
r->next=p;
r=p;
}
printf("\n成功插入%d个元素\n",n);
system("pause");
}
void insert(LinkList &L){
int i,j=0,data;
Lnode *p,*s;
p=L;
printf("\n 请输入插入的位置 i:");
scanf("%d",&i);
if(i<1){
printf("您输入的位置有误!\n");
system("pause");
}
else{
printf("\n 插入的数据 data:");
scanf("%d",&data);
while(p->next&&j<i-1){
p=p->next;++j;
}
s=(LinkList)malloc(sizeof(Lnode));
s->data=data;
s->next=p->next;
p->next=s;
printf("\n插入成功\n");system("pause");
}
}
void deleter(LinkList &L){
int i,j=0,data;
Lnode *p,*q;
p=L;
printf("\n 请输入删除的位置 i:");
scanf("%d",&i);
if(i<1){
printf("您输入的位置有误!\n");
system("pause");
}
else{
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(p->next){
q=p->next;
p->next=q->next;
data=q->data;
//free(q);
delete q;
printf("\n删除成功\n");
printf("\n删除的数据为%d上的数据:%d\n",i,data);system("pause");
}
else{
printf("不存在!\n");
system("pause");
}
}
}
void nizi(LinkList &L){
Lnode *p,*q;
p=L->next;
L->next=NULL;
while(p!=NULL){
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
system("pause");
}
void outlin(LinkList &L)
{
system("cls");
int i=1;
Lnode *p;
p=L;
printf("表信息:\n");
printf("位置 元素值 物理地址");
while(p->next){
p=p->next;
printf("\n%2d %6d %15p",i++,p->data,p);
}
printf("\n-------------------------");
}
二、执行结果
1.初始化单链表
2.创建单链表
3. 插入元素
4. 删除元素
5.单链表逆置