练习1:
list.h:
#ifndef __LIST_H__ #define __LIST_H__ #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 7 typedef int datatype; typedef struct { datatype data[MAX]; int len; }str,*str_p; //创建顺序表 str_p found(); //输出顺序表 void show(str_p); //清空顺序表 void clear(str_p p); //释放顺序表 void Release(str_p); //判空 int Judge_null(str_p p); //判满 int Judge_full(str_p); //头插 void Head_socket(str_p p,datatype data); //头删 void Head_delet(str_p p); //尾插 void Trail_socket(str_p p,datatype data); //位置插入 void Pos_insertion(str_p p,datatype data,datatype n); #endif
list.c:
#include "list.h" //创建顺序表 str_p found() { //申请内存 str_p p=(str_p)malloc(sizeof(str)); if(p==NULL) { printf("申请失败\n"); return NULL; } bzero(p->data,sizeof(p->data)); p->len=0; return p; } //输出顺序表 void show(str_p p) { if(Judge_null(p)) { printf("表为空\n"); return; } for(int i=0;i<p->len;i++) { printf("%d ",p->data[i]); } putchar(10); } //清空顺序表 void clear(str_p p) { bzero(p->data,sizeof(p->data)); p->len=0; } //释放顺序表 void Release(str_p p) { free(p); p=NULL; } //判空 int Judge_null(str_p p) { if(p==NULL) { printf("入参为空\n"); return -1; } return p->len==0?1:0; } //判满 int Judge_full(str_p p) { if(p==NULL) { printf("入参为空\n"); return -1; } return p->len==MAX?1:0; } //头插 void Head_socket(str_p p,datatype data) { if(Judge_full(p)) { printf("表已满,不能插入\n"); return; } for(int i=p->len-1;i>=0;i--) { p->data[i+1]=p->data[i]; } p->data[0]=data; p->len++; } //头删 void Head_delet(str_p p) { if(p==NULL) { printf("入参为空\n"); return ; } if(Judge_null(p)) { printf("表为空\n"); return; } for(int i=0;i<p->len-1;i++) { p->data[i]=p->data[i+1]; } p->data[p->len-1]=0; p->len--; } //尾插 void Trail_socket(str_p p,datatype data) { if(Judge_full(p)) { printf("表已满,不能插入\n"); return; } if(Judge_null(p)) { printf("表为空\n"); return; } p->data[p->len]=data; p->len++; } //位置插入 void Pos_insertion(str_p p,datatype data,datatype n) { if(p==NULL) { printf("入参为空\n"); return; } if(Judge_full(p)) { printf("表已满,不能插入\n"); return; } if(n>MAX) { printf("输入不符合\n"); return; } /*for(int i=p->len>=n?p->len-1:n-1;i>=n-1;i--) { p->data[i+1]=p->data[i]; }*/ for(int i=p->len-1;i>=n-1;i++) { p->data[i+1]=p->data[i]; } p->data[n-1]=data; /*if(p->len<n) { p->len=n; } else { p->len++; }*/ p->len++; }
main.c:
#include "list.h" int main() { str_p p=found(); //printf("%d\n",Judge_null(p)); Head_socket(p,70); Head_socket(p,60); Head_socket(p,50); Head_socket(p,40); Trail_socket(p,80); Head_delet(p); show(p); clear(p); Head_socket(p,99); Head_socket(p,88); Trail_socket(p,101); Head_delet(p); show(p); Pos_insertion(p,166,2); show(p); Release(p); }
思维导图