函数用c语言实现顺序表 用c语言编写顺序表( 六 )


void main()
{SqList L1,L2,L;
int select;
ElemType e;
do{printf("\n1insert2merge");
printf("\n3symmetric0exit \n");
printf("Please select(0--3)\n");
scanf("%d",select);
switch(select){
case 1:
InitList(L);
CreateList_Sorted(L);
Traverse(L,printdata);
printf("\nInput the element of inserted\n");
scanf("%d",e);
Insert(L,e);
Traverse(L,printdata);
break;
case 2:
InitList(L1);
CreateList_Sorted(L1);
Traverse(L1,printdata);
InitList(L2);
CreateList_Sorted(L2);
Traverse(L2,printdata);
InitList(L);
MergeList(L1,L2,L);
Traverse(L,printdata);
break;
case 3:
InitList(L);
CreateList(L);
Traverse(L,printdata);
if (Symmetric(L)) printf("Yes!\n"); else printf("Not\n");
break;
case 0:break;
default:printf("Error! Try again!\n");
}
}while(select);
}
/*单向链表的有关操作示例*/
/*类型定义及头文件部分,文件名为sllink.h*/
#include stdio.h
#include stdlib.h
typedefint ElemType;//元素实际类型
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList; //定义结点、指针类型名
//头插法建立无序链表
void CreateList(LinkList L){
LinkList p;
ElemType e;
L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
printf("头插法建立链表,以0结束\n");
scanf("%d",e);
while(e){
p=(LinkList)malloc(sizeof(LNode));
p-data=https://www.04ip.com/post/e;
p-next=L-next;
L-next=p;
scanf("%d",e);
}
}
/*非递减有序单向链表L插入元素e序列仍有序*/
void Insert_Sort(LinkList L,ElemType e){
LinkList p,s;
s=(LinkList)malloc(sizeof(LNode));
s-data=https://www.04ip.com/post/e;
p=L;
while(p-nextp-next-data=https://www.04ip.com/post/e)
p=p-next;/*查找插入位置*/
s-next=p-next; /*插入语句*p结点后插入*s结点*/
p-next=s;
}
/*建立递增有序的单向链表*/
voidCreate_Sort(LinkList L){
ElemType e;
L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
printf("建立有序表,输入任意个整型数据以0结束\n");
scanf("%d",e);
while(e){
Insert_Sort(L,e);
scanf("%d",e);
}
}
/*单向链表的遍历*/
void Traverse(LinkList L){
LinkList p;
printf("遍历链表");
for(p=L-next;p;p=p-next)
printf("%5d",p-data);
printf("\n");
}
/*在单向链表删除元素e*/
void Delete(LinkList L,ElemType e){
LinkList p,q;
p=L;
q=L-next;
while(q q-data!=e){//查找元素的删除位置
p=q;
q=q-next;
}
if(!q) printf("\nnot deleted");/*未找到元素e*/
else {p-next=q-next;/*找到删除*/
free(q);}
}
/*单向链表的逆置*/
void exch(LinkList L){
LinkList p,s;
p=L-next;
L-next=NULL;
while(p){
s=p;
p=p-next;
s-next=L-next;
L-next=s;
}
}
/*两个非递减有序单向链表合并后仍为非递减序列*/
void MergeIncrease(LinkList La,LinkList Lb,LinkList Lc){
LinkList p,q,s,rear;
p=La-next;
q=Lb-next;
Lc=rear=La;
free(Lb);
while(pq){
if (p-dataq-data) {s=p;p=p-next; }
else {s=q;q=q-next; }
rear-next=s;/*较小元素插入表尾*/
rear=rear-next;
}
if (p) rear-next=p; else rear-next=q;
}
/*主函数部分,文件名为sllink.c*/
//#include "sllink.h"
void main(){
LinkList La,Lb,Lc;
ElemType e;
int select;
do{
printf("1建立无序表,再删除指定元素\n");
printf("2建立递增有序表 , 再逆置\n");

推荐阅读