《数据结构与算法》实验指导V2017 printf(\ PrintList_sq(&sl); break; case 2:
printf(\ printf(\ scanf(\ int pos;
if (!ListLocate(&sl,k,&pos)) printf(\ else {
printf(\ printf(\ PrintList_sq(&sl); }
break; case 3:
printf(\
printf(\ scanf(\ if (ListInsert_sq(&sl,m,k)) {
printf(\
printf(\ PrintList_sq(&sl); } else
printf(\ break; case 4:
printf(\
printf(\ scanf(\ int deldata;
if (ListDelete_sq(&sl,k,&deldata)) {
printf(\
printf(\ printf(\ PrintList_sq(&sl); } else
printf(\
常熟理工学院计算机科学与工程学院
6
《数据结构与算法》实验指导V2017 break; case 0:
exit(0); /*如菜单返回值为0程序结束*/ } }
return 0; }
(1)创建一个顺序表
(2)查找元素位置
(3)插入元素
常熟理工学院计算机科学与工程学院
7
《数据结构与算法》实验指导V2017
(4)删除元素
2、按照要求完成程序exp2_2.c,实现单链表的相关操作。exp2_2.c部分代码如下:
#include
typedef int ElemType; /*定义表元素的类型*/
/*(1)---线性表的单链表存储表示*/ typedef struct LNode {
ElemType date; struct LNode *next; }LNode,*LinkList;
LNode *InitList(); /*带头结点单链表初始化*/
常熟理工学院计算机科学与工程学院
8
《数据结构与算法》实验指导V2017 void PrintList(LinkList L); /*输出带头结点单链表的所有元素*/
int GetElem(LinkList L,int i,ElemType *e); /*查找第i位置的元素,并由e返回其值*/ int InsertElem(LinkList L,int i,ElemType e);/*在第i个位置插入元素e*/
int DeleteElem(LinkList L,int i,ElemType *e);/*删除第i位置的元素,并由e返回其值*/ void DestroyLinkList(LinkList L);/*释放链表及其空间*/ LinkList CreateList(int n); /*创建n个结点的单链表*/ int menu_select(); /*菜单函数*/ /*带头结点单链表初始化*/ LNode *InitList() {
LinkList L;
L=(LNode *)malloc(sizeof(LNode)); /*申请一个头结点*/ if (!L) return ERROR; /*申请失败*/
L->next=NULL; /*头结点的指针域置空*/ return L; }
/*(1)---输出带头结点单链表的所有元素*/ void PrintList(LinkList L) {
LNode *p=L->next; int i=0; while(p) {
i++;
printf(\第%d个元素%d\ p=p->next;
}
}/*PrintList*/ /*(2)---在单链表的第i个位置插入元素e,若插入成功返回OK,插入失败返回ERROR*/ int InsertElem(LinkList L,int i,ElemType e) {
LNode *p=L,*s; int j=0;
while(p&&j p=p->next; j++; } if(!p||j>i-1) return ERROR; s=(LNode *)malloc(sizeof(LNode)); 常熟理工学院计算机科学与工程学院 9 《数据结构与算法》实验指导V2017 if(!s)return ERROR; s->date=e; s->next=p->next; p->next=s; return OK; }/* InsertElem */ /*(3)---查找第i位置的元素,若存在返回OK并由e返回其值,若不存在返回ERROR*/ int GetElem(LinkList L,int i,ElemType *e) { LNode *p; int j=1; p=L->next; while(p&&j p=p->next; j++; } if(!p||j>i) return ERROR; *e=p->date; return OK; }/*GetElem*/ /*(4)---删除第i位置的元素,成功返回OK,并由e返回其值,若不成功返回ERROR,注意删除的结点必须释放其所占空间*/ int DeleteElem(LinkList L,int i,ElemType *e) { LNode *p=L,*s; int j=0; while(p&&j p=p->next; j++; } if(!p||j>i-1) return ERROR; s=p->next; p->next=s->next; *e=s->date; free(s); return OK; }/* DeleteElem */ /*(5)---创建具有n个结点的单链表,创建成功返回其头指针*/ LinkList CreateList(int n) 常熟理工学院计算机科学与工程学院 10