- 32
- 0
- 约3.33千字
- 约 4页
- 2017-06-02 发布于河南
- 举报
实验一线性表[链式存储结构]
实验一?线性表
本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。要求仔细阅读并理解下列例题,上机通过,并观察其结果,然后独立完成后面的实习题。
二.例题
[问题描述]
用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。
[输入]
初始字符串,插入位置,插入字符,删除字符。
[输出]
已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。
[存储结构]
采用链式存储结构
[算法的基本思想]
建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。
[参考源程序]
#define NULL 0
typedef struct node{
??? char a;
??? struct node *link;
}node,*nodelink;
void readlink(nodelink head){
??? nodelink p,q;
??? char c;
??? p=head;
??? printf(Input a linktable(a string):);
??? scanf(%c,c);
??? if (c==\n) printf(This string is empty。);
??? while(c!=\n){
?????? q=(nodelink)malloc(sizeof(node));
?????? q-a=c;
?????? p-link=q;
?????? p=q;
?????? scanf(%c,c);
??? ? }
??? p-link=NULL;
}
void writelink(nodelink head){
??? nodelink q;
??? if (head-link==NULL) printf( This link is empty。\n);
??? for(q=head-link;q;q=q-link)
牋牋牋 printf(%c,q-a);
牋?printf(\n);
牋?}
int?insert(nodelink head,char k1,char k2){
牋?nodelink p,q;
牋?p=head-link;
牋?while(p-a!=k1p)
牋牋牋 p=p-link;
牋?if(p){
牋牋牋 q=(nodelink)malloc(siz eof(node));
牋牋牋 q-a=k2;
牋牋牋 q-link=p-link;
牋牋牋 p-link=q;
牋牋牋 return 1;
牋??}
牋?else?{
牋牋牋 printf(There is no %c\n,k1);
牋牋牋 return 0;
牋?牋}
}
int?delete(nodelink head,char k){
牋?nodelink p,q;
牋?q=head;
牋?p=head-link;
? 牋 while(((p-a)!=k)p){
牋牋牋 q=q-link;
牋牋牋 p=p-link;
牋??}
牋?if(p){
牋牋牋 q-link=p-link;
牋牋牋 return 1;
牋牋牋 }
牋?else{
牋牋牋 printf(There is no %c\n,k);
牋牋牋 return 0;
牋??}
}
void opside(nodelink head){
牋?nodelink p,q;
牋?p =head-link;
牋?while(p-link){
牋牋牋 q=p-link;
牋牋牋 p-link=q-link;
牋牋牋 q-link=head-link;
牋牋牋 head-link=q;
牋??}
}
main()
{
牋?char k1,k2,k3;
牋?nodelink head;
牋?head=(nodelink)malloc(sizeof(node));
牋?head-link=NULL;
牋?readlink(h ead);
牋?if (head-link!=NULL){
牋 爌rintf(Build link is :);
牋?
原创力文档

文档评论(0)