本文共 3494 字,大约阅读时间需要 11 分钟。
这里展示一个利用动态链表实现逆序存储和输出学生信息的实例。通过操作链表结构,我们将学生信息按输入顺序倒序打印出来。
我们定义了一个学生节点结构,每个节点包含以下各项信息:
节点结构如下:
typedef struct stu { char num[100]; char name[100]; char sex; int old; int sco; struct stu *next;} Node;
使用malloc函数分配内存空间,并通过strcpy函数初始化节点信息。创建函数的实现如下:
Node* Creat(char* m_num, char* m_name, char m_sex, int m_old, int m_sco) { Node* p = (Node*)malloc(sizeof(Node)); strcpy(p->num, m_num); strcpy(p->name, m_name); p->sex = m_sex; p->old = m_old; p->sco = m_sco; p->next = NULL; return p;}
将新的节点插入链表的第一位置,以实现逆序的效果。插入函数的实现如下:
Node* Insert(Node* head, Node* add) { if (head == NULL) return add; add->next = head; head = add; return head;}
遍历链表从第一个节点打印到最后一个节点。输出函数的实现如下:
void Print(Node* head) { while (head != NULL) { cout << head->num << " "; cout << head->name << " "; cout << head->sex << " "; cout << head->old << " "; cout << head->sco << endl; head = head->next; }}
在main函数中,依次读取输入,构造节点并将节点插入链表的顶部。具体实现如下:
int main() { char m_num[50]; char m_name[100]; char m_sex = '0'; int m_old = 0, m_sco = 0; Node* head = NULL; while (cin >> m_num) { if (strcmp(m_num, "end") != 0) { cin >> m_name >> m_sex; cin >> m_old >> m_sco; Node* add = Creat(m_num, m_name, m_sex, m_old, m_sco); head = Insert(head, add); } else { goto ca; } }ca: Print(head); Destory(head); return 0;}
#include#include #include #include using namespace std;
typedef struct stu { char num[100]; char name[100]; char sex; int old; int sco; struct stu *next;} Node;
Node* Creat(char* m_num, char* m_name, char m_sex, int m_old, int m_sco) { Node* p = (Node*)malloc(sizeof(Node)); strcpy(p->num, m_num); strcpy(p->name, m_name); p->sex = m_sex; p->old = m_old; p->sco = m_sco; p->next = NULL; return p;}
Node* Insert(Node* head, Node* add) { if (head == NULL) return add; add->next = head; head = add; return head;}
void Print(Node* head) { while (head != NULL) { cout << head->num << " "; cout << head->name << " "; cout << head->sex << " "; cout << head->old << " "; cout << head->sco << endl; head = head->next; }}
void Destory(Node* head) { if (head != NULL) { Destory(head->next); free(head); }}
int main() { char m_num[50]; char m_name[100]; char m_sex = '0'; int m_old = 0, m_sco = 0; Node* head = NULL; while (cin >> m_num) { if (strcmp(m_num, "end") != 0) { cin >> m_name >> m_sex; cin >> m_old >> m_sco; Node* add = Creat(m_num, m_name, m_sex, m_old, m_sco); head = Insert(head, add); } else { goto ca; } } ca: Print(head); Destory(head); return 0;}
20170210 zhangsan f 16 10020170140 wangyuan m 15 9820170118 lisi f 14 6520170928 zhaojing m 15 99end
20170928 zhaojing m 15 9920170118 lisi f 14 6520170140 wangyuan m 15 9820170210 zhangsan f 16 100
通过这个实例,可以看出利用动态链表的方式能够高效地处理逆序数据输出的需求。这个解决方案充分发挥了链表数据结构的优势,实现了数据的高效插入和输出操作。
转载地址:http://oyoiz.baihongyu.com/