单链表的基本操作,正序/逆序建表(尾插法/头插法)、计算单链表长度、输出单链表内容、插入、删除,给出完整代码
来源:互联网 发布:淘宝商品加入公益宝贝 编辑:程序博客网 时间:2024/05/17 23:59
#include "iostream"
using namespace std;
typedef struct Node//结点类型定义
{
char data;
struct Node * next;
}Node,*LinkList;//*LinkList用来定义单链表的头结点,Node用来定义单链表中的结点(头结点不属于单链表的内容)
LinkList Init_List()//初始化单链表
{
Node *L;
L = (LinkList)malloc(sizeof(Node));
if (L == NULL)
{
printf("初始化失败!\n");
exit(-1);
}
L->next = NULL;
return L;
}
void CreatFromHead_LinkList(LinkList L)//头插法建表(逆序)
{
Node *s;
char c;
int flag = 1;
cout << "请输入内容,并以“$”结束" << endl;
while (flag)
{
cin >> c;
if (c != '$')
{
s = (Node*)malloc(sizeof(Node));
s->data = c;
s->next = L->next;
L->next = s;
}
else
{
flag = 0;
}
}
}
void CreatFromTail_LinkList(LinkList L)//尾插法建表
{
Node *r, *s;//r的作用是以一个独立的结点来等价新节点,以此来持续链接新的结点,简单来说,r始终用来等于链表中的最后一个结点,再从它后面加新结点
char c;
int flag = 1;
r = L;
cout << "请输入内容,并以“$”结束"<<endl;
while (flag)
{
cin >> c;
if (c != '$')
{
s = (Node*)malloc(sizeof(Node));
s->data = c;
r->next = s;
r = s;
}
else
{
flag = 0;
r->next = NULL;
}
}
}
int Length_LinkList(LinkList L)//计算单链表长度
{
Node *p;
p = L->next;
int Length = 0;
while (p!=NULL)
{
p = p->next;
Length++;
}
return Length;
}
void Input_Length_LinkList(LinkList L)//输出单链表长度
{
cout<<"单链表的长度为:" << Length_LinkList(L)<<endl;
}
void Dispaly_LinkList(LinkList L)//输出单链表内容
{
cout << "单链表的内容是:"<<endl;
Node *p;
p = L->next;
while (p != NULL)
{
cout << p->data<<" ";
p = p->next;
}
cout << endl;
}
void Get_LinkList(LinkList L)//查找指定序号对应的元素
{
Node *p;
p = L;
int i;
flag://flag2
cout << "请选择序号:" << endl;
cin >> i;
if (i<1 || i>Length_LinkList(L))
{
cout << "超出范围,请重新选择"<<endl;
goto flag;//flag2
}
else
{
for (int j = 0; j < i; j++)
p = p->next;
}
cout<< "第"<<i<<"元素是:"<<p->data << endl;
}
void Insert_LinkList(LinkList L)//给指定位置插入元素
{
Node *p,*q;
p = L;
q = Init_List();//初始化q结点
char e;
int i;
flag://flag3
cout << "请选择插入的位置"<< endl;
cin >> i;
if (i<1 || i>Length_LinkList(L)+1)//判断插入的位置是否合理
{
cout << "超出范围,请重新选择" << endl;
goto flag;//flag3
}
else if (i == Length_LinkList(L)+1)//插在表尾
{
cout << "请输入插入的元素:"<<endl;
cin >> e;
for (int j = 0; j < i-1; j++)
p = p->next;
q->data = e;
p->next = q;
}
else//插在表中
{
cout << "请输入插入的元素:" << endl;
cin >> e;
for (int j = 0; j < i-1; j++)
p = p->next;
q->data = e;
q->next = p->next;
p->next = q;
}
}
void Delete_LinkList(LinkList L)//删除序号位置的元素
{
Node *p,*q;
p = L;
int i;
flag://flag4
cout << "请选择要删除的元素序号"<<endl;
cin >> i;
if (i<1||i>Length_LinkList(L))
{
cout << "超出单链表范围,请重新输入"<<endl;
goto flag;//flag4
}
else
{
for (int j = 0; j < i-1; j++)
p = p->next;
q = p->next;
p->next = q->next;
int e = q->data;
free(q);
}
}
int main()
{
LinkList L;
L=Init_List();
flag://flag1
cout << "*------------------------------------------------------*" << endl;//从这开始选择功能
cout << "请选择功能:"
<< endl << "1.正序建表"
<< endl << "2.逆序建表"
<< endl << "3.输出单链表的长度"
<< endl << "4.输出单链表的内容"
<< endl << "5.查找指定序号的元素"
<< endl << "6.在指定位置插入元素"
<< endl << "7.删除指定序号的元素"
<< endl << "0.退出程序" << endl;
int n;
cin >> n;
switch (n)
{
case 1:CreatFromTail_LinkList(L); break;
case 2:CreatFromHead_LinkList(L); break;
case 3:Input_Length_LinkList(L); break;
case 4:Dispaly_LinkList(L); break;
case 5:Get_LinkList(L); break;
case 6:Insert_LinkList(L); break;
case 7:Delete_LinkList(L); break;
default:cout << "谢谢使用!"<<endl;
system("pause");
return 0;
}
cout << "是否继续使用顺序表其他功能?"<<endl<<"1 for 是;2 for 否" << endl;
int ss;
cin >> ss;
if (ss == 1)
{
goto flag;//flag1
}
system("pause");
return 0;
}
using namespace std;
typedef struct Node//结点类型定义
{
char data;
struct Node * next;
}Node,*LinkList;//*LinkList用来定义单链表的头结点,Node用来定义单链表中的结点(头结点不属于单链表的内容)
LinkList Init_List()//初始化单链表
{
Node *L;
L = (LinkList)malloc(sizeof(Node));
if (L == NULL)
{
printf("初始化失败!\n");
exit(-1);
}
L->next = NULL;
return L;
}
void CreatFromHead_LinkList(LinkList L)//头插法建表(逆序)
{
Node *s;
char c;
int flag = 1;
cout << "请输入内容,并以“$”结束" << endl;
while (flag)
{
cin >> c;
if (c != '$')
{
s = (Node*)malloc(sizeof(Node));
s->data = c;
s->next = L->next;
L->next = s;
}
else
{
flag = 0;
}
}
}
void CreatFromTail_LinkList(LinkList L)//尾插法建表
{
Node *r, *s;//r的作用是以一个独立的结点来等价新节点,以此来持续链接新的结点,简单来说,r始终用来等于链表中的最后一个结点,再从它后面加新结点
char c;
int flag = 1;
r = L;
cout << "请输入内容,并以“$”结束"<<endl;
while (flag)
{
cin >> c;
if (c != '$')
{
s = (Node*)malloc(sizeof(Node));
s->data = c;
r->next = s;
r = s;
}
else
{
flag = 0;
r->next = NULL;
}
}
}
int Length_LinkList(LinkList L)//计算单链表长度
{
Node *p;
p = L->next;
int Length = 0;
while (p!=NULL)
{
p = p->next;
Length++;
}
return Length;
}
void Input_Length_LinkList(LinkList L)//输出单链表长度
{
cout<<"单链表的长度为:" << Length_LinkList(L)<<endl;
}
void Dispaly_LinkList(LinkList L)//输出单链表内容
{
cout << "单链表的内容是:"<<endl;
Node *p;
p = L->next;
while (p != NULL)
{
cout << p->data<<" ";
p = p->next;
}
cout << endl;
}
void Get_LinkList(LinkList L)//查找指定序号对应的元素
{
Node *p;
p = L;
int i;
flag://flag2
cout << "请选择序号:" << endl;
cin >> i;
if (i<1 || i>Length_LinkList(L))
{
cout << "超出范围,请重新选择"<<endl;
goto flag;//flag2
}
else
{
for (int j = 0; j < i; j++)
p = p->next;
}
cout<< "第"<<i<<"元素是:"<<p->data << endl;
}
void Insert_LinkList(LinkList L)//给指定位置插入元素
{
Node *p,*q;
p = L;
q = Init_List();//初始化q结点
char e;
int i;
flag://flag3
cout << "请选择插入的位置"<< endl;
cin >> i;
if (i<1 || i>Length_LinkList(L)+1)//判断插入的位置是否合理
{
cout << "超出范围,请重新选择" << endl;
goto flag;//flag3
}
else if (i == Length_LinkList(L)+1)//插在表尾
{
cout << "请输入插入的元素:"<<endl;
cin >> e;
for (int j = 0; j < i-1; j++)
p = p->next;
q->data = e;
p->next = q;
}
else//插在表中
{
cout << "请输入插入的元素:" << endl;
cin >> e;
for (int j = 0; j < i-1; j++)
p = p->next;
q->data = e;
q->next = p->next;
p->next = q;
}
}
void Delete_LinkList(LinkList L)//删除序号位置的元素
{
Node *p,*q;
p = L;
int i;
flag://flag4
cout << "请选择要删除的元素序号"<<endl;
cin >> i;
if (i<1||i>Length_LinkList(L))
{
cout << "超出单链表范围,请重新输入"<<endl;
goto flag;//flag4
}
else
{
for (int j = 0; j < i-1; j++)
p = p->next;
q = p->next;
p->next = q->next;
int e = q->data;
free(q);
}
}
int main()
{
LinkList L;
L=Init_List();
flag://flag1
cout << "*------------------------------------------------------*" << endl;//从这开始选择功能
cout << "请选择功能:"
<< endl << "1.正序建表"
<< endl << "2.逆序建表"
<< endl << "3.输出单链表的长度"
<< endl << "4.输出单链表的内容"
<< endl << "5.查找指定序号的元素"
<< endl << "6.在指定位置插入元素"
<< endl << "7.删除指定序号的元素"
<< endl << "0.退出程序" << endl;
int n;
cin >> n;
switch (n)
{
case 1:CreatFromTail_LinkList(L); break;
case 2:CreatFromHead_LinkList(L); break;
case 3:Input_Length_LinkList(L); break;
case 4:Dispaly_LinkList(L); break;
case 5:Get_LinkList(L); break;
case 6:Insert_LinkList(L); break;
case 7:Delete_LinkList(L); break;
default:cout << "谢谢使用!"<<endl;
system("pause");
return 0;
}
cout << "是否继续使用顺序表其他功能?"<<endl<<"1 for 是;2 for 否" << endl;
int ss;
cin >> ss;
if (ss == 1)
{
goto flag;//flag1
}
system("pause");
return 0;
}
阅读全文
1 0
- 单链表的基本操作,正序/逆序建表(尾插法/头插法)、计算单链表长度、输出单链表内容、插入、删除,给出完整代码
- 合并两个单链表,其中包括尾插法建表、计算单链表长度、输出单链表,给出完整代码
- 自己写的顺序表的基本操作,插入、删除、修改,给出完整代码,其中运用到goto语句
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- 程序员面试宝典(第三版)——单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- LinkedList 的简单操作 :插入 删除 正序、逆序遍历
- Java实现单链表的插入、删除、计算链表的长度和输出链表
- 单链表的基本操作的实现(建立、插入、删除、逆序)
- 程序员面试宝典(第三版)——单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置(转)
- 单链表[建表、输出、插入、删除、逆序]
- 正序逆序生成单链表,正序逆序输出链表(递归法和顺序栈法)
- C_线性表----单链表的基本操作(构表、插入、删除、倒序、输出)
- C++单链表的创建插入删除以及逆序操作
- list 基本操作 1 -- 创建,插入,删除,计算长度
- 数据结构:链表的基本操作(创建,删除,插入,逆序,摧毁)
- 完整的链表操作(定义-创建-插入-删除-输出)
- 短信发送接口开发
- 初始化对象
- openwrt下载问题
- 2017.09.10【NOIP提高组】模拟赛B组
- u_boot和Linux内核之间的参数传递
- 单链表的基本操作,正序/逆序建表(尾插法/头插法)、计算单链表长度、输出单链表内容、插入、删除,给出完整代码
- Tomcat服务器学习和使用(一)
- divide-two-integers
- RxJava学习笔记之线程调度器Scheduler(二)
- 【模板】网络最大流 (Dinic)
- Asp.MVC中几种常用ActionResult
- 博客笔记
- 构造方法重载
- Java内存模型图