一、要求
完成一个链表的初始化(创建)、结点的插入、删除和输出的基本算法的实现。
理解链表结点数据结构定义
typedef struct {
DataType data; // 结点的数据域
struct ListNode *next; // 结点的指针域
}ListNode, *LinkList
二、代码
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}ListNode,*LinkList;
void init(LinkList &L); //初始化
void create(LinkList &L); //创建
void insert(LinkList &L); //插入
void outMsg(LinkList &L); //输出
void deleter(LinkList &L); //删除
int main(){
int flag;
LinkList L;
init(L);
do
{
printf(" 《 可选操作选项如下: 》\n");
printf(" 1 初始化一个空单链表\n");
printf(" 2 建立n个结点的单链表\n");
printf(" 3 插入一个元素\n");
printf(" 4 删除一个元素\n");
printf(" 5 结束程序\n");
printf("-------------------------------------\n");
printf(" 请输入您需要的操作(1,2,3,4,5) :");
scanf("%d",&flag);
switch(flag)
{
case 1:
{
init(L); //初始化链表L
// outMsg(L);
}break;
case 2:
{
create(L);
// outMsg(L);
}break;
case 3:
{
insert(L);
// outMsg(L);
}break;
case 4:
{
deleter(L);
// outMsg(L);
}break;
case 5:exit(0);
}
}while(flag<=5);
return 0;
}
void init(LinkList &L){
L=(LinkList)malloc(sizeof(LinkList));
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);
outMsg(L);
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");
outMsg(L);
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成功删除第%d个结点的数据:%d\n",i,data);system("pause");
}
else{
printf("不存在!\n");
system("pause");
}
}
outMsg(L);
}
void outMsg(LinkList &L)
{
system("cls");
int i=1;
Lnode *p, *sss;
p=L;
sss=L;
printf("链表中数据的详细信息:\n");
printf("位置 元素值 物理地址");
while(p->next){
p=p->next;
printf("\n%2d %6d %20p",i++,p->data,p);
}
printf("\n--------------------------------------------\n链表数据:");
p=sss;
for(;p->next;)
{
p=p->next;
printf("%4d ,",p->data);
}
printf("\n--------------------------------------------\n");
printf("\n");
}
希望能帮助到各位,欢迎大家在此交流评论。