单链表的基本操作操作,类C语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表的基本操作操作,类C语言相关的知识,希望对你有一定的参考价值。

带头结点的有序单链表的插入、删除、打印等基本操作,要求做文字菜单

#include < iostream >
#include < string >
using namespace std;#define NULL 0struct list

string name;
long num;
string sex;
list * next;
;
int n;void main()

list * creat(void);
list * del(list * head,long num);
list * insert(list * head,list * stud);
void print(list * head);
list * head,* list_;
long del_num;
bool quit_del = false;
bool quit_insert = false;
cout << "Menu: " << endl;
cout << "1--创建链表" << endl;
cout << "2--删除结点" << endl;
cout << "3--添加结点" << endl;
cout << "4--察看链表" << endl;
int n = 0;
cin >> n;
if (n != 1)
cout << "没有结点,请创建" << endl << endl;
n = 1;
to:switch(n)

case 1:
cout << endl;
cout << "请创建链表(格式: 序号 姓名 姓别(F or M)) -_-||" << endl;
head = creat();
cout << endl << "请输入 1,2,3,4(Menu),键入其它终止 _";
break;
case 2:
quit_del = false;
cout << endl << " -_-|| 请输入要删除的序号:";
cin >> del_num;
while ( !quit_del )

head = del(head,del_num);
print(head);
cout << "继续? *** y ***** n ***";
char param_del;
cin >> param_del;
if ( param_del == \'y\')

cout << "-_-|| 请输入要删除的序号: ";
cin >> del_num;

else if( param_del != \'n\')

cout << "输入有误,无法判断,返回菜单" << endl;
quit_del = true;
break;

else

quit_del = true;
break;


cout << endl << "请输入 1,2,3,4(Menu),键入其它终止 _";
break;
case 3:
quit_insert = false;
cout << endl << "-_-|| 请输入要添加的结点: " << endl;
list_ = new list;
cin >> list_->num >> list_->name >> list_->sex;
while ( !quit_insert )

head = insert(head,list_);
cout << "继续? *** y ***** n ***";
char param_insert;
cin >> param_insert;
if ( param_insert == \'y\')

cout << endl << "-_-|| 请输入要添加的结点: " << endl;
list_ = new list;
cin >> list_->num >> list_->name >> list_->sex;

else if ( param_insert != \'n\' )

cout << "输入有误,无法添加,返回菜单" << endl;
quit_insert = true;
break;

else

quit_insert = true;
break;


cout << endl << "请输入 1,2,3,4(Menu),键入其它终止 _";
break;
case 4:
print(head);
cout << endl << "请输入 1,2,3,4(Menu),键入其它终止 _";
break;
default:
cout << "呃,又出错误了" << endl;

cin >> n;
if (n == 1)

cout << "结点已被创建,无法重复" << endl;
n = 4;

while ( n == 2 || n == 3 || n == 4)

goto to;

list * creat(void)

bool quit_creat = false;
list * head;
list * p1, * p2;
n = 0;
p1 = p2 = new list;
cin >> p1->num >> p1->name >> p1->sex;
head = NULL;
while ( !quit_creat )

n = n + 1;
if (n == 1)
head = p1;
else p2->next = p1;
p2 = p1;
cout << "继续? *** y ***** n ***";
char param_creat;
cin >> param_creat;
if (param_creat == \'y\')

p1 = new list;
cin >> p1->num >> p1->name >> p1->sex;

else if (param_creat != \'n\')

cout << "输入有误,无法完成继续创建,返回菜单" << endl;
quit_creat = true;
break;

else

quit_creat = true;
break;


p2->next = NULL;
return (head);
list * del(list * head,long num)

list * p1, * p2;
if (head == NULL)

cout << "该链表为空,无法删除-_-||" << endl;
return (head);

p1 = head;
while (num != p1->num && p1->next != NULL)

p2 = p1;
p1 = p1->next;

if (num == p1->num)

if (p1 == head)
head = p1->next;
else
p2->next = p1->next;
delete p1;
cout << "o(∩_∩)o 删除: " << num << endl;
n = n - 1;

else cout << endl << "没有 -_-|| 找到: " << num << endl;
return (head);
list * insert(list * head,list * stud)

list * p0,* p1, * p2;
p1 = head;
p0 = stud;
if (head == NULL)

head = p0;
p0->next = NULL;

else

while ((p0->num > p1->num) && (p1->next != NULL))

p2 = p1;
p1 = p1->next;

if (p0->num <= p1->num)

if (head == p1)
head =p0;
else
p2->next = p0;
p0->next = p1;

else

p1->next = p0;
p0->next = NULL;


n = n + 1;
return (head);
void print(list * head)

list * p;
cout << endl << "这" << n << "条记录顺序如下: " << endl;
p = head;
if (head != NULL)
do

cout << p->num << " " << p->name << " " << p->sex << endl;
p = p->next;
while(p != NULL);
//以前做的一个..应该符合你的要求
参考技术A 数据结构书上有!在网上有电子版的 你找找看

以上是关于单链表的基本操作操作,类C语言的主要内容,如果未能解决你的问题,请参考以下文章

数据结构单链表的介绍和基本操作(C语言实现)保姆级别详细教学

C语言用C语言实现单链表的所有操作

单链表的查找建立操作(C语言)

单链表的基本操作实现

单链表的插入删除操作详解(C语言)

[C语言]单链表及其基本操作