1.
#include"haha1.h"
StackPtr stack_create()
{
StackPtr S=(StackPtr)malloc(sizeof(Stack));
if(NULL==S)
{
printf("创建失败\n");
return NULL;
}
S->data=(typedata*)malloc(sizeof(typedata)*MAX);
if(NULL==S->data)
{
printf("创建失败\n");
return NULL;
}
memset(S->data,0,sizeof(typedata));
S->top=-1;
printf("创建成功\n");
return S;
}
int list_empty(StackPtr S)
{
return S->top==-1;
}
int list_full(StackPtr S)
{
return S->top==MAX-1;
}
void stack_push(StackPtr S,typedata e)
{
if(NULL==S||list_full(S))
{
printf("输入失败\n");
return;
}
S->top++;
S->data[S->top]=e;
printf("输入成功\n");
return;
}
//遍历
void stack_show(StackPtr S)
{
if(S==NULL||list_empty(S))
{
printf("遍历失败\n");
return;
}
for(int i=S->top;i>=0;i--)
{
printf("%d\t",S->data[i]);
}
printf("遍历完成\n");
return;
}
void stack_pop(StackPtr S)
{
if(NULL==S||list_full(S))
{
printf("删除失败\n");
return;
}
printf("滚出去%d\n",S->data[S->top]);
S->top--;
return;
}
//获取栈顶元素
typedata* stack_get_top(StackPtr S)
{
if(NULL==S||list_empty(S))
{
printf("失败\n");
return NULL;
}
return &S->data[S->top];
}
//栈大小
int big(StackPtr S)
{
if(NULL==S||list_empty(S))
{
printf("失败\n");
return -1;
}
return S->top+1;
}
2.
#include"haha1.h"
StackPtr stack_create()
{
StackPtr S=(StackPtr)malloc(sizeof(Stack));
if(NULL==S)
{
printf("创建失败\n");
return NULL;
}
S->data=(typedata*)malloc(sizeof(typedata)*MAX);
if(NULL==S->data)
{
printf("创建失败\n");
return NULL;
}
memset(S->data,0,sizeof(typedata));
S->top=-1;
printf("创建成功\n");
return S;
}
int list_empty(StackPtr S)
{
return S->top==-1;
}
int list_full(StackPtr S)
{
return S->top==MAX-1;
}
void stack_push(StackPtr S,typedata e)
{
if(NULL==S||list_full(S))
{
printf("输入失败\n");
return;
}
S->top++;
S->data[S->top]=e;
printf("输入成功\n");
return;
}
//遍历
void stack_show(StackPtr S)
{
if(S==NULL||list_empty(S))
{
printf("遍历失败\n");
return;
}
for(int i=S->top;i>=0;i--)
{
printf("%d\t",S->data[i]);
}
printf("遍历完成\n");
return;
}
void stack_pop(StackPtr S)
{
if(NULL==S||list_full(S))
{
printf("删除失败\n");
return;
}
printf("滚出去%d\n",S->data[S->top]);
S->top--;
return;
}
//获取栈顶元素
typedata* stack_get_top(StackPtr S)
{
if(NULL==S||list_empty(S))
{
printf("失败\n");
return NULL;
}
return &S->data[S->top];
}
//栈大小
int big(StackPtr S)
{
if(NULL==S||list_empty(S))
{
printf("失败\n");
return -1;
}
return S->top+1;
}
3.
#include "haha1.h"
int main(int argc, const char *argv[])
{
StackPtr S=stack_create();
if(NULL==S)
{
printf("申请失败\n");
return -1;
}
int a=0;
printf("请输入:");
scanf("%d",&a);
while(a!=0)
{
if(a%2==0)
{
stack_push(S,0);
}
if(a%2==1)
{
stack_push(S,1);
}
a=a/2;
}
stack_show(S);
printf("\n");
stack_pop(S) ;
return 0;
}
#include"ceshi1.h"
//创建循环链表
NodePtr list_create()
{
//堆区申请一个头节点
NodePtr L=(NodePtr)malloc(sizeof(Node));
if(NULL==L)
{
printf("创建时报\n");
return NULL;
}
memset(L,0,sizeof(Node));
//初始化
L->next=L;//头节点指针域指向自己
printf("创建成功\n");
return L;
}
//链表判空
int list_empty(NodePtr L)
{
return L->next==L;
}
//链表申请空间封装节点
NodePtr apply_node(char* arr,int brr,double crr)
{
NodePtr p =(NodePtr)malloc(sizeof(Node));
if(NULL==p)
{
printf("创建失败\n");
return NULL;
}
strcpy(p->name,arr);
p->age=brr;
p->score=crr;
p->next =NULL;
return p;
}
//按位置查找
NodePtr list_search_pos(NodePtr L,int pos)
{
if(NULL==L||pos<0||pos>L->len)
{
printf("查找失败\n");
return NULL;
}
NodePtr q=L;
for(int i =0;i<pos;i++)
{
q=q->next;
}
return q;
}
//链表尾插
int list_insert_tail(NodePtr L,char*arr,int brr,double crr)
{
//判断逻辑
if(NULL==L)
{
printf("插入失败\n");
return -1;
}
//找到最后一个节点
NodePtr q=list_search_pos(L,L->len);
//封装节点
NodePtr p =apply_node(arr,brr,crr);
if(NULL==p)
{
printf("没装好\n");
return -1;
}
//插入逻辑
p->next=q->next;
q->next=p;
//表的变化
L->len++;
printf("插入成功\n");
return 0;
}
//链表遍历
int list_show(NodePtr L)
{
if(NULL==L||list_empty(L))
{
printf("遍历失败\n");
return -1;
}
NodePtr q=L->next;
while(q!=L)
{
printf("%s\t%d\t%.1lf\n",q->name,q->age,q->score);
q=q->next;
}
printf("\n");
}
//头删
int list_delete_head(NodePtr L)
{
if(NULL==L||list_empty(L))
{
printf("删除失败\n");
return -1;
}
NodePtr p=L->next;
L->next =p->next;
free(p);
p=NULL;
L->len--;
printf("删除成功\n");
}
//链表销毁
void list_destory(NodePtr L)
{
if(NULL==L)
{
printf("释放失败\n");
return ;
}
while(!list_empty(L))
{
list_delete_head(L);
}
free(L);
L=NULL;
printf("销毁成功\n");
}
int zhao(NodePtr L,NodePtr S)
{
if(NULL==L||list_empty(L))
{
printf("查找失败\n");
return -1;
}
int i=1;
NodePtr p=L->next;
while(p!=S&&p!=L)
{
i++;
p=p->next;
}
if(p==L)
{
printf("找不到\n");
return -1;
}
return i;
}
/*int list_delete(NodePtr L.int pos);
{
if(NULL==L||list_empty(L))
{
printf("删除失败\n");
return -1;
}
NodePtr p=L->next;
L->next =p->next;
free(p);
p=NULL;
L->len--;
printf("删除成功\n");
}
*/
hq@ubuntu:~/11day$ cat ceshi3.c
#include "ceshi1.h"
int main(int argc, const char *argv[])
{
//调用创建函数
NodePtr L=list_create();
if(NULL==L)
{
printf("创建失败\n");
return -1;
}
/* int a =0;
printf("请输入人数:");
scanf("%d",&a);
for(int i=0;i<a;i++)
{
list_insert_tail(L,"人",i+1,0);
}
list_show(L);
NodePtr p=L;
while(p->next!=NULL)
{
int a=5;
while(a--!=0)
{
p=p->next;
}
int m= zhao(p)
list_delete(p,m);
}*/
list_destory(L);
L=NULL;
return 0;
}
hq@ubuntu:~/11day$ cat ceshi1.h
#ifndef HHHHH
#define HHHHH
#include<myhead.h>
typedef char datatype;
typedef struct Node
{
int len;
char name[20];
int age;
double score;
struct Node *next;
}Node,*NodePtr;
//创建循环链表
NodePtr list_create();
//链表判空
int list_empty(NodePtr L);
//链表申请空间封装节点
NodePtr apply_node(char*arr,int brr,double crr);
//按位置查找
NodePtr list_search_pos(NodePtr L,int pos);
//链表尾插
int list_insert_tail(NodePtr L,char*arr,int brr,double crr);
//链表遍历
int list_show(NodePtr L);
//头删
int list_delete_head(NodePtr L);
//链表销毁
void list_destory(NodePtr L);
//按节点找位置
int zhao(NodePtr L,NodePtr S);
//删除成功
void list_delete(NodePtr L,int pos);
#ifndef HELLO
#define HELLO
#include<myhead.h>
#define MAX 20
typedef char datatype;
typedef struct Node
{
int len;
char name[MAX];
int age;
double score;
struct Node*prio;
struct Node*next;
}Node,*NodePtr;
//菜单
void menu();
//创建双链表
NodePtr List_create();
//链表判空
int list_empty(NodePtr L);
//申请节点封装数据
NodePtr apply_node(char*arr,int brr,double crr);
//链表头插
int list_insert_head(NodePtr L);
//链表遍历
int list_show(NodePtr L);
//按位置查找节点
NodePtr list_search_pos(NodePtr L,int pos);
//按位置删除
int list_delete_pos(NodePtr L,int pos);
//添加
void list_add(NodePtr L);
//修改
void list_change(NodePtr L,int pos);
//查重
void list_checking(NodePtr L);
//摧毁
void list_destroy(NodePtr L);
#endif
hq@ubuntu:~/11day$ cat lianxi2.c
#include"lianxi1.h"
NodePtr List_create()
{
NodePtr L=(NodePtr)malloc(sizeof(Node));
if(NULL==L)
{
printf("创建失败\n");
return NULL;
}
memset(L,0,sizeof(Node));
L->prio=NULL;
L->next=NULL;
printf("创建成功\n");
return L;
}
int list_empty(NodePtr L)
{
return L->next==NULL;
}
//菜单
void menu()
{
printf("********学生管理系统*********\n");
printf("**********1.头插*************\n");
printf("**********2.遍历*************\n");
printf("**********3.增加*************\n");
printf("**********4.删除*************\n");
printf("**********5.修改*************\n");
printf("**********6.查重*************\n");
printf("**********7.摧毁*************\n");
}
//封装函数
NodePtr apply_node(char *arr,int brr,double crr)
{
NodePtr L=(NodePtr)malloc(sizeof(Node));
if(NULL==L)
{
printf("封装失败\n");
return NULL;
}
memset(L,0,sizeof(Node));
strcpy(L->name,arr);
L->age=brr;
L->score=crr;
L->next=NULL;
L->prio=NULL;
printf("封装完成\n");
return L;
}
//按位置找节点
NodePtr list_search_pos(NodePtr L,int pos)
{
if(NULL==L||list_empty(L)||pos<1)
{
printf("查找失败\n");
return NULL;
}
NodePtr p=L->next;
if(pos==1)
{
printf("查找成功\n");
return p;
}
for(int i=2;i<=pos;i++)
{
p=p->next;
}
printf("查找成功\n");
return p;
}
int list_insert_head(NodePtr L)
{
if(NULL==L)
{
printf("头插失败\n");
return -1;
}
char arr[MAX]={""};
int brr =0;
double crr=0;
printf("请输入姓名:");
scanf("%s",arr);
printf("请输入年龄:");
scanf("%d",&brr);
printf("请输入成绩:");
scanf("%lf",&crr);
NodePtr p=apply_node(arr,brr,crr);
if(list_empty(L))
{
L->next=p;
p->prio=L;
}
else
{
p->next=L->next;
p->prio=L;
L->next->prio=p;
L->next=p;
}
L->len++;
printf("头插成功\n");
return 0;
}
int list_show(NodePtr L)
{
if(NULL==L||list_empty(L))
{
printf("遍历失败\n");
return -1;
}
NodePtr p=L->next;
while(p!=NULL)
{
printf("姓名:%s\t年龄:%d\t成绩:%1.lf\n",p->name,p->age,p->score);
p=p->next;
}
printf("插入完成\n");
return 0;
}
void list_add(NodePtr L)
{
if(L==NULL)
{
printf("添加失败\n");
return ;
}
char arr[MAX]={""};
int brr =0;
double crr=0;
printf("请输入姓名:");
scanf("%s",arr);
printf("请输入年龄:");
scanf("%d",&brr);
printf("请输入成绩:");
scanf("%lf",&crr);
NodePtr p=apply_node(arr,brr,crr);
NodePtr q=L->next;
if(list_empty(L))
{
L->next=p;
p->prio=L;
L->len++;
printf("添加成功\n");
return ;
}
else
while(q!=NULL)
{
if(q->next==NULL)
{
q->next=p;
p->prio=q;
L->len++;
printf("添加成功\n");
return;
}
q=q->next;
}
}
int list_delete_pos(NodePtr L,int pos)
{
if(L==NULL||list_empty(L)||pos<1||L->len<1)
{
printf("删除错误\n");
return -1;
}
NodePtr p=list_search_pos(L,pos);
if(p->next==NULL)
{
p->prio->next=NULL;
}
else
{
p->next->prio=p->prio;
p->prio->next=p->next;
}
L->len--;
free(p);
p=NULL;
printf("删除完成\n");
return 0;
}
void list_change(NodePtr L,int pos)
{
if(NULL==L||list_empty(L)||pos<1||L->len<1)
{
printf("修改失败\n");
return;
}
NodePtr p=list_search_pos(L,pos);
char arr[MAX]={""};
int brr =0;
double crr=0;
printf("请输入姓名:");
scanf("%s",arr);
printf("请输入年龄:");
scanf("%d",&brr);
printf("请输入成绩:");
scanf("%lf",&crr);
strcpy(p->name,arr);
p->age=brr;
p->score=crr;
printf("修改完成\n");
return;
}
void list_checking(NodePtr L)
{
if(NULL==L||list_empty(L))
{
printf("查重失败\n");
return;
}
NodePtr p=L->next;
while(p!=NULL&&p->next!=NULL)
{
NodePtr q=p->next;
while(q!=NULL&&q->next!=NULL)
{
printf("1\n");
if(q->score==p->score)
{
printf("1\n");
NodePtr m=q;
q->next->prio=q->prio;
q->prio->next=q->next;
L->len--;
free(m);
m=NULL;
break;
}
else
q=q->next;
}
if(q==NULL||q->next==NULL)
{
p=p->next;
}
}
printf("查重完成\n");
return;
}
void list_destroy(NodePtr L)
{
if(NULL==L)
{
printf("释放失败\n");
}
while(list_empty(L))
{
NodePtr p=L->next;
L->next->next->prio=L;
L->next=L->next->next;
free(p);
p=NULL;
L->len--;
}
free(L);
L==NULL;
printf("摧毁成功\n");
}
hq@ubuntu:~/11day$ cat lianxi3.c
#include "lianxi1.h"
int main(int argc, const char *argv[])
{
//调用创建
NodePtr L=List_create();
if(NULL==L)
{
return -1;
}
do
{
menu();
int a=0;
scanf("%d",&a);
switch(a)
{
case 1:
{
list_insert_head(L);
}break;
case 2:
{
list_show(L);
}break;
case 3:
{
list_add(L);
}break;
case 4:
{
int pos =0;
printf("请输入删除位置:");
scanf("%d",&pos);
list_delete_pos(L,pos);
}break;
case 5:
{
int pos =0;
printf("请输入修改位置:");
scanf("%d",&pos);
list_change(L,pos);
}break;
case 6:
{
list_checking(L);
}break;
case 7:
{
list_destroy(L);
L=NULL;
}break;
default:
{
printf("输入错误\n");
}break;
}
} while (1);
return 0;
}
Day ??? 链表与线性表
最新推荐文章于 2024-08-09 10:19:12 发布