问题及代码:
/*
*Copyright (c)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:table.cpp
*作 者:单昕昕
*完成日期:2016年3月23日
*版 本 号:v1.0
*
*问题描述:单链表的基本运算。
*程序输入:无。
*程序输出:单链表。
*/
#include <iostream>
#include <malloc.h>
using namespace std;
const int N=100;
typedef struct LNode
{
char data;
struct LNode * next;
} LinkList;
int main()
{
cout<<"单链表的基本运算如下:"<<endl;
///(1)初始化单链表h;
cout<<"(1)初始化单链表h"<<endl;
LinkList *h;
h=(LinkList *)malloc(sizeof(LinkList));
h->next=NULL;
///(2)采用尾插法依次插入元素a,b,c,d,e;
cout<<"(2)采用尾插法依次插入元素a,b,c,d,e"<<endl;
int i;
char a[5];
for(i=0; i<5; ++i)
a[i]=char(i+97);
LinkList *s,*r;
r=h;
for(i=0; i<5; ++i)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
///(3)输出单链表h;
cout<<"(3)输出单链表h:";
LinkList *p=h->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
///(4)输出单链表h长度;
cout<<"(4)输出单链表h长度:";
int length=0;
p=h;
while(p->next!=NULL)
{
++length;
p=p->next;
}
cout<<length<<endl;
///(5)判断单链表h是否为空;
cout<<"(5)判断单链表h是否为空:";
if(!(h->next==NULL))
cout<<"不";
cout<<"是空表"<<endl;
///(6)输出单链表h的第3个元素;
cout<<"(6)输出单链表h的第3个元素:";
length=0;
p=h;
while(p->next!=NULL)
{
++length;
p=p->next;
if(length==3)
{
cout<<p->data<<endl;
break;
}
}
///(7)输出元素a的位置;
cout<<"(7)输出元素a的位置:";
p=h;
i=0;
while(p->next!=NULL)
{
if(p->data==char(97))
{
cout<<i<<endl;
break;
}
++i;
p=p->next;
}
///(8)在第4个元素位置上插入元素f;
cout<<"(8)在第4个元素位置上插入元素f"<<endl;
int j=0;
p=h;
while(j<3&&p!=NULL)
{
++j;
p=p->next;
}
s=(LinkList *)malloc(sizeof(LinkList));
s->data=char(102);
s->next=p->next;
p->next=s;
///(9)输出单链表h;
cout<<"(9)输出单链表h:";
p=h->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
///(10)删除h的第3个元素;
cout<<"(10)删除h的第3个元素"<<endl;
j=0;
p=h;
while(j<2&&p!=NULL)
{
++j;
p=p->next;
}
s=p->next;
if(s==NULL)
cout<<"不存在该元素!"<<endl;
p->next=s->next;
free(s);
///(11)输出单链表h;
cout<<"(11)输出单链表h:";
p=h->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
///(12)释放单链表h;
cout<<"(12)释放单链表h";
LinkList *pre=h;
p=h->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
return 0;
}
运行结果: