一.顺序表
// 1)顺序表的基本操作:
typedef struct{
int number; //学号
char name[20]; //姓名
}ElemType;
typedef struct{
ElemType data[Max];
int length;
int listsize;
}Sqlist;
// 初始化
int initSqlist(Sqlist *L){
L->length=0;
L->listsize=Max;
return 1;
}
// 插入
int insertSqlist(Sqlist *L,int i,ElemType e){
int k;
if(i<1||i>L->length||L->length>=L->listsize){
printf("插入失败n");
return 0;
}
else{
for(k=L->length-1;k>=i-1;k--)
L->data[k+1]=L->data[k];
L->data[i-1]=e;
L->length=L->length+1;
return 1;
}
}
// 创建
int creatSqlist(Sqlist *L){
int k,i;
ElemType e;
initSqlist(L);
printf("请输入创建信息数目n");
scanf("%d",&k);
for(i=0;iL->length||L->length==0){
printf("删除失败n");
return 0;
}
else{
for(k=i-1;klength-1;k++)
L->data[k]=L->data[k+1];
L->length--;
return 1;
}
}
// 查找
int locationSqlist(Sqlist L,char a[]){
int i;
if(L.length==0){
printf("空表,查找失败n");
return 0;
}
else{
for(i=0;iL->length||L->length==0){
printf("修改失败n");
return 0;
}
strcpy(L->data[i-1].name,a);
return 1;
}
// 遍历
int travelSqlist(Sqlist L){
int i;
if(L.length==0){
printf("空表,遍历失败n");
return 0;
}
else{
for(i=0;iL.length||L.length==0){
printf("输出失败n");
return 0;
}
else{
printf("%d %sn",L.data[i-1].number,L.data[i-1].name);
return 1;
}
}
// 有序归并
Sqlist combineSqlist(Sqlist L,Sqlist R){
Sqlist T;
int i;
initSqlist(&T);
int p=0,q=0;
while(p
二.单链表
// 2)带头结点单链表的基本操作:
typedef struct node{
int data;
struct node *next;
}Node,*LinkList;
//初始化
int initLinkList(LinkList *L){
(*L)=(LinkList)malloc(sizeof(Node));
if((*L)==NULL){
printf("初始化失败n");
exit(0);
}
(*L)->next=NULL;
return 1;
}
// 插入(头插、尾插、任意位置插入)
//a.头插
int firstinsert(LinkList L,int a){
LinkList s;
s=(LinkList)malloc(sizeof(Node));
if(s==NULL){
printf("插入失败n");
return 0;
}
s->data=a;
s->next=L->next;
L->next=s;
return 1;
}
//b.尾插(L是空表)
int lastinsert(LinkList L,int a){
LinkList s,R=L;
s=(LinkList)malloc(sizeof(Node));
if(s==NULL){
printf("插入失败n");
return 0;
}
while(R->next!=NULL){
R=R->next;
}
s->data=a;
s->next=R->next;
R->next=s;
return 1;
}
//c.任意位置插入
int insert(LinkList L,int i,int a){
LinkList s,p=L;
int pos=0;
s=(LinkList)malloc(sizeof(Node));
if(s==NULL||i<1){
printf("插入失败n");
return 0;
}
while(p!=NULL&&posnext;
pos++;
}
if(p==NULL){
printf("插入失败n");
return 0;
}
s->data=a;
s->next=p->next;
p->next=s;
return 1;
}
// 创建(尾插法)
int creatLinkList(LinkList *L){
int i,m,a;
initLinkList(L);
printf("请输入要创建的数目n");
scanf("%d",&m);
for(i=0;inext;
L->next=p->next;
free(p);
}
return 1;
}
//b.尾删
int lastdelet(LinkList L){
LinkList p=L,q=L->next;
while(q->next!=NULL){
p=p->next;
q=q->next;
}
p->next=q->next;
free(p);
return 1;
}
//c.任意位置删除
int delet(LinkList L,int i){
LinkList q=L,p;
int pos=0;
while(q->next!=NULL&&posnext;
pos++;
}
if(i<1||q->next==NULL){
printf("删除失败n");
return 0;
}
p=q->next;
q->next=p->next;
free(p);
return 1;
}
// 查找
int locationLinkList(LinkList L,int a){
int i=1;
LinkList p=L->next;
while(p->data!=a&&p!=NULL){
i++;
p=p->next;
}
if(p==NULL){
printf("查找失败n");
return 0;
}
printf("查找数值位置为:%d",i);
return 1;
}
// 修改
int changeLinkList(LinkList L,int i,int a){
int pos=0;
LinkList p=L;
while(p!=NULL&&posnext;
}
if(p==NULL) return 0;
p->data=a;
return 1;
}
// 输出
int outputLinkList(LinkList L){
LinkList p=L->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
return 1;
}
// 求表长
int lengthLinkList(LinkList L){
int i=0;
LinkList p=L;
while(p!=NULL){
i++;
p=p->next;
}
printf("表长%dn");
return 1;
}
// 逆序
int inverLink(LinkList L){
LinkList p=L->next;
L->next=NULL;
while(p!=NULL){
firstinsert(L,p->data);
p=p->next;
}
return 1;
}
// 有序插入(从小到大)
int youxuinsert(LinkList L,int a){
LinkList p=L,s;
s=(LinkList)malloc(sizeof(Node));
s->data=a;
while(p->next!=NULL){
if(anext->data) {
s->next=p->next;
p->next=s;
break;
}
p=p->next;
}
if(p->next==NULL){
s->next=p->next;
p->next=s;
}
return 1;
}
// 单链表的有序归并
LinkList unionLinkList(LinkList L,LinkList R){
LinkList p=L->next,q=R->next,T,t=T,s;
initLinkList(&T);
while(p!=NULL&&q!=NULL){
s=(LinkList)malloc(sizeof(Node));
if(p->datadata){
s->data=p->data;
s->next=t->next;
t->next=s;
t=s;
q=q->next;
}
if(p->data>=q->data){
s->data=p->data;
s->next=t->next;
t->next=s;
t=s;
p=p->next;
}
}
while(p!=NULL){
s=(LinkList)malloc(sizeof(Node));
s->data=p->data;
s->next=t->next;
t->next=s;
t=s;
p=p->next;
}
if(q!=NULL){
s=(LinkList)malloc(sizeof(Node));
s->data=p->data;
s->next=t->next;
t->next=s;
t=s;
q=q->next;
}
return T;
}



