64,643
社区成员
发帖
与我相关
我的任务
分享
struct StuType
{
string num;
string name;
int age;
};
struct LNode
{
StuType data;
struct LNode *next;
}LNode,*LinkList;
写入到头文件中。如果非要把这两个结构体在cpp中声明,请参考《C++中类的前向声明》,希望能帮到您!#include<iostream>
#include<string.h>
using namespace std;
struct StuType;
struct LNode;
struct StuType
{
string num;
string name;
int age;
};
typedef struct LNode
{
StuType data;
struct LNode *next;
}LNode, *LinkList;
extern LinkList InitLink();
extern LinkList LinkInsert(LinkList head, int n);
extern int LinkDelete(LinkList head, int n);
extern LinkList LinkLocate(LinkList head, int n);
extern int PrintAll(LinkList head);
extern int Add();
extern int ListLength(LinkList head);
源文件
LinkList InitLink()
{
LinkList head;
head = new LNode();
if (head == NULL)
{
printf("申请内存空间失败\n");
}
head->next = NULL;
return (head);
}
LinkList LinkInsert(LinkList head, int n)
{
for (int i = 0; i<n; i++)
{
head = head->next;
}
LinkList newnode = new LNode();
cin >> newnode->data.num;
cin >> newnode->data.name;
cin >> newnode->data.age;
return(head);
}
int LinkDelete(LinkList head, int n)
{
LinkList p, q;
p = head;
for (int i = 0; i<n; i++)
{
p = p->next;
}
q = p->next;
p->next = q->next;
return 0;
}
LinkList LinkLocate(LinkList head, int n)
{
LinkList p;
p = head;
for (int i = 0; i<n; i++)
{
p = p->next;
}
return p;
}
int PrintAll(LinkList head)
{
LinkList p = head;
while (p != NULL)
{
cout << "学号:" << p->data.num << ' ' << "姓名:" << p->data.name << ' ' << "年龄:" << p->data.age << endl;
p = p->next;
}
return 0;
}
int Add()
{
cout << "请输入学号、姓名和专业";
LinkList newLNode = new LNode();
cin >> newLNode->data.num;
cin >> newLNode->data.name;
cin >> newLNode->data.age;
return 0;
}
int ListLength(LinkList head)
{
int n = 0;
while (head != NULL)
{
head = head->next;
n = n + 1;
}
return n;
}
int main()
{
int i, j, n, func;
LNode data;
LinkList pdata;
pdata = InitLink();
cout << "请输入要输入的学生信息条数";
cin >> n;
for (i = 0; i<n; i++)
int Add();
cout << "单链表中的学生信息为:" << endl;
PrintAll(pdata);
printf("0.退出,\t1.插入信息,\t2.删除信息,\t3.更新指定学生的姓名,\t4.查找指定学生的信息,\t5.输出所有学生信息,\t6.输出学生数量\n");
for (j = 0;; j++)
{
scanf("%d", &func);
switch (func)
{
case 0:
exit(1);
break;
case 1:
cout << "请输入要插入信息的位置:";
cin >> i;
cout << "请输入第" << i << "号学生的num,name,以及age" << endl;
cin >> data.data.num >> data.data.name >> data.data.age;
if (LinkInsert(pdata, i))
{
cout << "插入数据成功" << endl;
PrintAll(pdata);
}
break;
case 2:
cout << "请输入要删除信息的位置:";
cin >> i;
if (LinkDelete(pdata, i))
{
cout << "数据删除成功" << endl;
PrintAll(pdata);
}
break;
case 3:
cout << "请输入要更新信息的位置:";
cin >> i;
data = *LinkLocate(pdata, i);
cout << "请输入替换的姓名:";
cin >> data.data.name;
cout << "更新后第" << i << "个学生的信息为:num:" << data.data.num << ",name:" << data.data.name << ",age:" << data.data.age << endl;
break;
case 4:
cout << "请输入要查找信息的位置:";
cin >> i;
data = *LinkLocate(pdata, i);
cout << "第" << i << "个学生的信息为:num:" << data.data.num << ",name:" << data.data.name << ",age:" << data.data.age << endl;
break;
case 5:
PrintAll(pdata);
break;
case 6:
cout << "学生数量为" << ListLength(pdata);
}
}
return 0;
}
VS2015 C++环境