1 顺序表的按位替换值
2.顺序标的排序(选择排序)
3关于今日链表知识函数的封装的自我总结与编写
3.1 linklist.h 结构体申明和函数申明
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
typedef char datatype;
typedef struct linklist
{
union{
datatype data;
int len;
};
struct linklist *next;
}linklist;
//申请空间
linklist *list_set();
//头部插入
int list_insert_head(linklist *s,datatype e);
//遍历输出
void list_print(linklist *s);
//判空1空0非空
int list_empty(linklist *s);
//申请空间封装数值
linklist *list_apply(datatype e);
//尾插
int list_insert_tail(linklist *s,datatype e);
//按位置查找
linklist *list_find(linklist *s,int pos);
//任意位置插入
int list_insert_pos(linklist *s,int pos,datatype e);
#endif
3.2 linklist.c 主要文件 封装了今天学习的各个函数
#include<stdio.h>
#include<stdlib.h>
#include"linklist.h"
//申请空间
linklist *list_set()
{
linklist *s=(linklist*)malloc(sizeof(linklist));
if(NULL==s)
{
printf("创建失败\n");
return NULL;
}
printf("创建成功\n");
s->len=0;
s->next=NULL;
return s;
}
//头部插入
int list_insert_head(linklist *s,datatype e)
{
linklist *p=(linklist*)malloc(sizeof(linklist));
if(NULL==s||NULL==p)
{
printf("插入失败\n");
return -1;
}
p->data=e;
p->next=NULL;
p->next=s->next;
s->next=p;
s->len++;
printf("头插成功\n");
return 0;
}
//判空1空0非空
int list_empty(linklist *s)
{
return NULL==s->next&&s->len==0?1:0;
}
//遍历输出
void list_print(linklist *s)
{
if(NULL==s||list_empty(s))
{
printf("遍历失败\n");
return ;
}
linklist *q=s->next;
while(q!=NULL)
{
printf("%c\t",q->data);
q=q->next;
}
printf("\n");
}
//申请空间封装数值
linklist *list_apply(datatype e)
{
linklist*t=(linklist*)malloc(sizeof(linklist));
if(NULL==t)
{
return NULL;
}
t->next=NULL;
t->data=e;
return t;
}
//尾插
int list_insert_tail(linklist *s,datatype e)
{
linklist *p=list_apply(e);
if(NULL==s||NULL==p)
{
printf("插入失败\n");
return -1;
}
linklist *q=s;
while(q->next!=NULL)
{
q=q->next;
}
q->next=p;
printf("插入成功\n");
s->len++;
return 0;
}
//按位置查找
linklist *list_find(linklist *s,int pos)
{
if(NULL==s||pos<0||pos>s->len)
{
printf("查找失败\n");
return NULL;
}
linklist *q=s;
for(int i=0;i<pos;i++)
{
q=q->next;
}
return q;
}
//任意位置插入
int list_insert_pos(linklist *s,int pos,datatype e)
{
if(NULL==s||pos<1||pos>s->len)
{
printf("插入失败\n");
return -1;
}
linklist *p=list_apply(e);
linklist *q=list_find(s,pos-1);
p->next=q->next;
q->next=p;
s->len++;
printf("插入成功\n");
return 0;
}
3.3 main.c 测试函数,测试封装的函数是否可行
#include"linklist.h"
#include<stdio.h>
int main(int argc, const char *argv[])
{
linklist *s=list_set();
if(NULL==s)
{
return -1;
}
list_insert_head(s,'m');
list_insert_head(s,'n');
list_insert_head(s,'d');
list_insert_head(s,'w');
list_print(s);
list_insert_tail(s,'d');
list_insert_tail(s,'g');
list_print(s);
list_insert_pos(s,3,'G');
list_print(s);
return 0;
}