补day3
顺序表排序函数
void list_sort(Seqlist *list)
{
for(int i=1;i<list->len;i++)
{
for(int j=0;j<list->len-i;j++)
{
if(list->data[j]>list->data[j+1])
{
datatype a=list->data[j];list->data[j]=list->data[j+1];list->data[j+1]=a;
}
}
}
}
顺序表按顺序合并函数
void list_merge(Seqlist *la,Seqlist *lb,Seqlist *lc)
{
int p=0,q=0;
while(p<la->len && q<lb->len)
{
if(la->data[p]<lb->data[q])
lc->data[lc->len++]=la->data[p++];
else
lc->data[lc->len++]=lb->data[q++];
}
while(p<la->len)
{
lc->data[lc->len++]=la->data[p++];
}
while(q<lb->len)
{
lc->data[lc->len++]=lb->data[q++];
}
}
顺序表去重函数
void same_delete(Seqlist *list)
{
for(int i=0;i<list->len-1;i++)
{
for(int j=i+1;j<list->len;j++)
{
if(list->data[i]==list->data[j])
{
delete_sub(j,list);
j--;
}
}
}
}
day4链表操作(部分)
头函数head.h
#ifndef _HEAD_H
#define _HEAD_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define way 0
typedef int datatype;
typedef struct Node
{
datatype data;
struct Node *next;
}*Linklist;
Linklist create_Node();//创建节点
Linklist insert_head_linklist(datatype e,Linklist L);//头插
int Output(Linklist L);//遍历
#if way
Linklist insert_tail_linklist(datatype e,Linklist rear);//尾插1
#else
Linklist insert_tail_linklist(datatype e,Linklist L);//尾插2
#endif
Linklist delete_head(Linklist L);//头删
Linklist delete_tail(Linklist L);//尾删
Linklist insert_by_pos(int pos,datatype e,Linklist L);//按位置插入
Linklist search_by_pos(int pos,Linklist L);//按位置查找
Linklist change_by_pos(int pos,datatype e,Linklist L);//按位置修改
#endif
自定义函数text.c
#include"head.h"
//创建节点
Linklist create_Node()
{
Linklist node=(Linklist)malloc(sizeof(struct Node));
if(node==NULL)
return NULL;
node->data=0;
node->next=NULL;
return node;
}
//遍历链表
int Output(Linklist L)
{
if(L==NULL)
{
return -1;
}
while(L!=NULL)
{
printf("%d\t",L->data);
L=L->next;
}
printf("\n");
return 0;
}
//头插
Linklist insert_head_linklist(datatype e,Linklist L)
{
//在堆区创建节点
Linklist node=create_Node();
node->data=e;
node->next=L;
L=node;
return L;
}
#if way
Linklist insert_tail_linklist(datatype e,Linklist rear)//尾插1
{
Linklist node=create_Node();
if(NULL==node)
return NULL;
node->data=e;
if(rear!=NULL)
rear->next=node;
rear=node;
return rear;
}
#else
Linklist insert_tail_linklist(datatype e,Linklist L)//尾插2
{
Linklist s=create_Node();
s->data=e;
if(L==NULL)
{
L=s;
}
else
{
Linklist rear=L;
while(rear->next!=NULL)
rear=rear->next;
rear->next=s;
rear=s;
}
return L;
}
#endif
//头删
Linklist delete_head(Linklist L)
{
if(NULL==L)
{
return NULL;
}
else if(L->next==NULL)
{
free(L);
L=NULL;
}
else
{
Linklist q=L->next;
L->data=q->data;
L->next=q->next;
free(q);
q=NULL;
}
return L;
}
//尾删
Linklist delete_tail(Linklist L)
{
if(L==NULL)
return NULL;
else if(L->next==NULL)
{
free(L);
L=NULL;
}
else
{
Linklist rear=L;
while(rear->next->next!=NULL)
{
rear=rear->next;
}
free(rear->next);
rear->next=NULL;
}
return L;
}
//链表长度
int len_linklist(Linklist L)
{
int count=0;
while(L!=NULL)
{
L=L->next;
count++;
}
return count;
}
//按位置插入
Linklist insert_by_pos(int pos,datatype e,Linklist L)
{
int len;
if(pos<1 || NULL==L || pos>(len=len_linklist(L))+1)
{
return L;
}
Linklist p=L;
if(pos==len+1)
{
insert_tail_linklist(e,L);
return L;
}
for(int i=1;i<pos;i++)
{
p=p->next;
}
Linklist s=create_Node();
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return L;
}
//按位置查找
Linklist search_by_pos(int pos,Linklist L)
{
if(L==NULL)
{
return NULL;
}
int len=len_linklist(L);
if(pos<1 || pos>len)
{
return NULL;
}
Linklist p=L;
for(int i=1;i<pos;i++)
{
p=p->next;
}
return p;
}
//按位置修改
Linklist change_by_pos(int pos,datatype e,Linklist L)
{
if(L==NULL)
{
return NULL;
}
int len=len_linklist(L);
if(pos<1 || pos>len)
{
return NULL;
}
Linklist p=L;
for(int i=1;i<pos;i++)
{
p=p->next;
}
p->data=e;
return L;
}
主函数main.c
#include"head.h"
int main(int argc, const char *argv[])
{
Linklist L=NULL;
int n;
printf("please enter n:");
scanf("%d",&n);
//头插
for(int i=0;i<n;i++)
{
datatype e;
printf("please enter element:");
scanf("%d",&e);
L=insert_head_linklist(e,L);
}
Output(L);
printf("please enter n:");
scanf("%d",&n);
datatype e;
#if way
//尾插1
Linklist rear=L;
while(rear!=NULL && rear->next!=NULL)
rear=rear->next;
for(int i=0;i<n;i++)
{
printf("please enter element:");
scanf("%d",&e);
if(NULL==L)
{
L=rear;
}
rear=insert_tail_linklist(e,rear);
}
#else
//尾插2
for(int i=0;i<n;i++)
{
printf("please enter element:");
scanf("%d",&e);
L=insert_tail_linklist(e,L);
}
#endif
Output(L);
//头删
L=delete_head(L);
Output(L);
//尾删
L=delete_tail(L);
Output(L);
//按位置插入
int pos;
printf("please enter pos:");
scanf("%d",&pos);
printf("please enter element:");
scanf("%d",&e);
L=insert_by_pos(pos,e,L);
Output(L);
//按位置查找
printf("please enter seaarch_pos:");
scanf("%d",&pos);
Linklist p=search_by_pos(pos,L);
printf("%d\n",p->data);
//按位置修改
printf("please enter change_pos:");
scanf("%d",&pos);
printf("please enter change_element:");
scanf("%d",&e);
L=change_by_pos(pos,e,L);
Output(L);
return 0;
}
运行截图
思维导图