题目一线性结构的操作
1.用线性表的顺序存储(数组)保存数据
算法的N-S图或流程图
H
2.用线性表的链式存储(链表)保存数据 插入:
C2 、
C1
删除:
L
*A1 Ai ■ ?…一An
卜A1 } …
Ai
in clude
#in clude
int num; // 学号
char name[10]; // 姓名
}stude nt; //定义的抽象元素类型 Elemtype typedef struct Node /* 结点类型定义 */ {
student data;
struct Node *next;
}Node, *LinkList; /* LinkList 为结构指针类型 */ static int count;
//学生人数
//带头结点的尾插入法创建链表 void insert(LinkList head)
{
Lin kList p,q; 〃p代表的待插元素代入最后一个元素 q=head;//q 指向 head吉点 printf(\输入学生人数:\scanf(\for(int i=0;i { printf(\输入第%d个学生信息:\\n\ p = (LinkList)malloc( sizeof(Node)); //结点 p申请一个空间 printf(\输入学号:\ scanf('%d\〃输入结点 p的数据。学号 printf(\输入姓名:\ scanf('%s\输入结点的数据域姓名 name为数组类型数 组名为首地址所有此处不需要地址符号 if(i==0) { head->next = p; //i=0链表中没有元素只有头节点把插入到 head之后 } else { q->next = p; //链 表中已有结点元素结点采用尾插入法 } q = p; 〃每插入一个元素就赋值于q q始终指向最后一个元素 } p-> next = NULL; // 设置 next域为空 } void print(LinkList head) { LinkList x; //定义一个链表结点 x = head->next ; //该节点指向第一个元素 printf(\学生信息如下\\n\while(x) //存在结点 { printf(\学号%d 姓名%s\\n\〃输出该结点的据域学号和姓名 x = x->next ; //下一个元素 } printf(\ } //把链表中的文件信息放入文件中 //写入语句 void savetofile(LinkList head) { FILE*fp; LinkList p; p=head->next; if((fp=fopen(\ { printf(\不能打开文件\ return; } 数 while(p) { fprintf(fp, \p=p->next; } printf(\写入成功 \\n\ } //功能菜单 提示性语句 void menu() { printf(\退出1输入 2.输出3.写入\\n\ } void main() { int choice; LinkList l; l = (LinkList)malloc( sizeof(Node)); //头结点申请空间 l->next=NULL; //头结点的 next为空 menu(); while(1) { scanf(\输入一个整数 switch(choice) { case1: insert(l);menu();break; case2: print(l); menu();break; default: exit(0);