搜索热词
#include
#include
using namespace std;
#define MAX 100
typedef struct STU{
char name[20];
char sno[20];
int age;
float score;
}Student;
typedef struct LNode{
Student data;
struct LNode *next;
}LNode,*LinkList;
//初始化(带头结点的单链表)
int InitList(LinkList &L){
L=new LNode;
L->next=NULL;
return 1;
}
//判断链表是否为空
int ListEmpty(LinkList L){
if(L->next=NULL){
return 1;//链表为空
}else{
return 0;//链表非空
}
}
//获取链表长度
int ListLength(LinkList L){
int length=0;
struct LNode *p;
p=L->next;
while(p){
p=p->next;
length++;
}
return length;
}
//遍历链表
void TraveList(LinkList L){
struct LNode *p;
p=L->next;
printf("链表结构如下:\n");
while(p){
printf("%s %s %d %.2f",p->data.name,p->data.sno,p->data.age,p->data.score);
printf("\n");
p=p->next;
}
}
//插入操作
int ListInsert(LinkList &L,int location,Student &e){
//在链表L的location位置插入元素e
struct LNode *p;
int j=0;
p=L;
while(p&&j
p=p->next;
++j;
}
if(!p||j>location-1){
return 0;
}
struct LNode *s;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
//删除操作
int ListDelete(LinkList &L,Student &e){
//删除L中location位置的元素,并用e返回其值
struct LNode *p;
int j=0;
p=L;
while(p->next&&j
p=p->next;
++j;
}
if(!(p->next)||j>location-1){
return 0;
}
struct LNode *q;
q=new LNode;
q=p->next;
p->next=q->next;
e=q->data;
delete q;
return 1;
}
//头插法法创建单链表
void CreateList1(LinkList &L,int n){
//创建长度为n的单链表
L=new LNode;
L->next=NULL;
printf("请输入链表元素;\n");
for(int i=n;i>0;--i){
printf("请输入第%d个元素值:\n",i);
struct LNode *p;
p=new LNode;//生成新结点
//输入
printf("请输入姓名:");
scanf("%s",p->data.name);
printf("请输入学号:");
scanf("%s",p->data.sno);
printf("请输入年龄:");
scanf("%d",&p->data.age);
printf("请输入成绩:");
scanf("%f",&p->data.score);
p->next=L->next;
L->next=p;
}
}
//尾插法创建单链表
void CreateList2(LinkList &L,int n){
L=new LNode;
L->next=NULL;
struct LNode *r;
r=L;
printf("请输入链表元素值:\n");
for(int i=0;i
struct LNode *p;
p=new LNode;
printf("请输入第%d个元素的值:\n",i+1);
printf("请输入姓名:");
scanf("%s",p->data.name);
printf("请输入学号:");
scanf("%s",&p->data.score);
p->next=NULL;
r->next=p;
r=p;
}
}
int main(){
LinkList L;
printf("1.初始化链表\n");
printf("2.创建链表\n");
printf("3.插入操作\n");
printf("4.删除操作\n");
printf("0.退出\n");
int choose=-1;
while(choose!=0){
printf("请选择操作:\n");
scanf("%d",&choose);
switch(choose){
case 1:{
if(InitList(L)){
printf("链表初始化成功!\n");
}else{
printf("链表初始化失败!\n");
}
break;
}
case 2:{
printf("1.头插法创建单链表\n");
printf("2.尾插法创建单链表\n");
printf("请选择操作:\n");
int choose1;
scanf("%d",&choose1);
switch(choose1){
case 1:{
printf("请输入链表长度:\n");
int n;
scanf("%d",&n);
CreateList1(L,n);
TraveList(L);
break;
}
case 2:{
printf("请输入链表长度:\n");
int n;
scanf("%d",&n);
CreateList2(L,n);
TraveList(L);
break;
}
}
break;
}
case 3:{
printf("请输入插入的位置和值:\n");
int location;
scanf("%d",&location);
Student stu;
printf("请输入姓名:");
//char name[20];
scanf("%s",stu.name);
printf("请输入学号:");
scanf("%s",stu.sno);
printf("请输入年龄:");
scanf("%d",&stu.age);
printf("请输入成绩:");
scanf("%f",&stu.score);
if(ListInsert(L,location,stu)){
printf("插入成功!\n");
TraveList(L);
}else{
printf("插入失败!\n");
}
//TraveList(L);
break;
}
case 4:{
printf("请输入要删除的元素的位置:\n");
int location;
scanf("%d",&location);
Student stu;
if(ListDelete(L,stu)){
printf("删除成功!\n");
printf("删除的元素值是:\n");
printf("%s %s %d %.2f\n",stu.name,stu.sno,stu.age,stu.score);
TraveList(L);
}else{
printf("删除失败!\n");
}
//TraveList(L);
break;
}
}
}
}
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。