📄 my program.txt
字号:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define MAX 8
#define M 5
#define N 7
#define MAXSIZE 20
#define ERROR -1
typedef struct snode
{
char ch;
struct snode *next;
}string, *Lstring;
typedef struct node
{
int data;
struct node *next;
}Lnode,*LLnode;
typedef struct stack
{
int data[MAXSIZE];
int top;
}stack,*Lstack;
typedef struct queuenode
{
int data;
struct queuenode *next;
}linkqueue;
typedef struct
{
linkqueue *front;
linkqueue *rear;
}queue;
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void ShowMainMenu();
void ShowListMenu();
void ShowInsertMenu();
void InsertMenu();
void SearchMenu();
void DeleteMenu();
void MyList();
void Insert(Lnode *p);
void Search(Lnode *p);
void Delete(Lnode *p);
void ShowListData(Lnode *p);
void InsertAtHead(Lnode *p);
void InsertAtTail(Lnode *p);
Lnode *SearchData(Lnode *p);
Lnode *SearchNum(Lnode *p);
Lnode *DeleteData(Lnode *p);
Lnode *DeleteNum(Lnode *p);
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void MyString();
string *assign(string *p,int n);/*建立第一个单链表*/
string *assignp(string *p,int n);/*建立第二个单链表*/
string *assignpp(string *p,int n);/*建立第三个单链表*/
void print(string *p);/*打印单链表*/
void length(string *p);/*求表长*/
void catchstr(string *p,string *tp);/*连接两个链表*/
void Insertstr(string *tp,string *p);/*把p插入到tp中*/
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void MyStack();
void Initstack(stack **s);/*初始化堆栈*/
bool Isempty(stack s);/*判断栈空*/
bool Isfull(stack s);/*判断栈满*/
void Push(stack *s,int x);/*压栈*/
int Pop(stack *s);/*出栈*/
int Gettop(stack s);/*获取栈顶元素*/
void Emptystack(stack *s);/*置栈为空*/
int Measurestack(stack s);/*求栈长*/
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void main()
{
int n;
do{
ShowMainMenu();
printf("请输入选择序号1-4:\n");
scanf("%d",&n);
switch(n)
{
case 1:
MyList();
break;
case 2:
MyString();
break;
case 3:
MyStack();
break;
case 4:
break;
default:
printf("错误,重新输入\n");
}
}while(n!=4);
}
void MyList()
{
Lnode *head;
int n,i,b[10]={1,2,3,4,5,6,7,8,9,10};
head=(Lnode *)malloc(sizeof(Lnode));
head->next=NULL;
Lnode *q,*p=head;
for(i=0;i<10;i++)
{
q=(Lnode*)malloc(sizeof(Lnode));
q->data=b[i];
q->next=NULL;
p->next=q;
p=p->next;
}
do{
ShowListMenu();
printf("请输入选择序号1-6:\n");
scanf("%d",&n);
switch(n)
{
case 1:
{
if(head)
printf("创建了一个带头结点的链表\n");
else
printf("创建链表操作失败\n");
ShowListData(head);
}
break;
case 2:
Insert(head);
break;
case 3:
Search(head);
break;
case 4:
Delete(head);
break;
case 5:
ShowListData(head);
break;
case 6:
break;
default:
printf("错误,重新输入\n");
}
}while(n!=6);
}
void Insert(Lnode *hp)
{
if(hp==NULL)
{
printf("链表没有创建,不能进行此项操作\n");
return;
}
int n;
do{
InsertMenu();
printf("请输入选择序号1-3:\n");
scanf("%d",&n);
switch(n){
case 1:
InsertAtHead(hp);
break;
case 2:
InsertAtTail(hp);
break;
case 3:
break;
default:
printf("错误,重新输入\n");
}
}while(n!=3);
}
void Search(Lnode *hp)
{
Lnode *p;
if(hp==NULL)
{
printf("链表没有创建,不能进行此项操作\n");
return;
}
int n;
do{
SearchMenu();
printf("请输入选择序号1-3:\n");
scanf("%d",&n);
switch(n){
case 1:
p=SearchData(hp);
break;
case 2:
p=SearchNum(hp);
break;
case 3:
break;
default:
printf("错误,重新输入\n");
}
}while(n!=3);
}
void Delete(Lnode *hp)
{
Lnode *p;
if(hp==NULL)
{
printf("链表没有创建,不能进行此项操作\n");
return;
}
int n;
do{
DeleteMenu();
printf("请输入选择序号1-3:\n");
scanf("%d",&n);
switch(n){
case 1:
p=DeleteData(hp);
break;
case 2:
p=DeleteNum(hp);
break;
case 3:
break;
default:
printf("错误,重新输入\n");
}
}while(n!=3);
}
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void ShowMainMenu()
{
printf("\n **************《数据结构课程设计》****************\n");
printf(" * 1 线性表 2 串 *\n" );
printf(" * 3 栈 4 退出 *\n" );
printf(" ***************************************************\n");
}
void ShowListMenu()
{
printf(" ************《线性表》*************\n");
printf(" * 1 创建线性表 2 插入元素 *\n");
printf(" * 3 查找元素 4 删除元素 *\n");
printf(" * 5 浏览 6 退出 *\n");
printf(" ***********************************\n");
}
void InsertMenu()
{
printf(" **********《线性表插入元素》*******\n");
printf(" * 1 头插 2 尾插 3 退出 *\n");
printf(" ***********************************\n");
}
void SearchMenu()
{
printf(" **********《线性表查找元素》*******\n");
printf(" * 1 按值查找 2 按序号查找 3 退出 *\n");
printf(" ***********************************\n");
}
void DeleteMenu()
{
printf(" ************《线性表删除元素》***********\n");
printf(" * 1 删除特定元素 2 删除第i个元素 3 退出 *\n");
printf(" *****************************************\n");
}
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void ShowStringMenu()
{
printf(" *****************《串》****************\n");
printf(" * 1 创建两个串链表 2 求表长 *\n");
printf(" * 3 连接两个串链表 4 插入 *\n");
printf(" * 5 浏览 6 退出 *\n");
printf(" ***************************************\n");
}
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void ShowStackMenu()
{
printf(" ******************《堆栈》**************\n");
printf(" * 1 初始化堆栈 2 判断栈空 *\n");
printf(" * 3 判断栈满 4 压栈 *\n");
printf(" * 5 求栈长 6 获取栈顶元素 *\n");
printf(" * 7 出栈 8 退出 *\n");
printf(" ****************************************\n");
}
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void InsertAtTail(Lnode *h)
{
Lnode *p=h;
int x;
printf("请输入要插入的元素:");
scanf("%d",&x);
while(p->next)
p=p->next;
p->next=(Lnode*)malloc(sizeof(Lnode));
p->next->data=x;
p->next->next=NULL;
ShowListData(h);
}
void InsertAtHead(Lnode *h)
{
Lnode *p=h,*q;
int x;
printf("请输入要插入的元素:");
scanf("%d",&x);
q=(Lnode*)malloc(sizeof(Lnode));
q->data=x;
q->next=p->next;
p->next=q;
ShowListData(h);
}
Lnode *SearchNum(Lnode *h)
{
int i;
printf("请输入要查找的结点元素的序号:");
scanf("%d",&i);
LLnode p=h;
int j=0;
while(p->next&&j<i)
{
j++;
p=p->next;
}
if(j==i)
{
printf("查找到的结点为:%d\n",p->data);
return p;
}
else
{
printf("未找到目标结点\n");
return h;
}
}
Lnode *SearchData(Lnode *h)
{
int x;
printf("请输入要查找的结点元素:");
scanf("%d",&x);
LLnode p=h->next;
while(p&&p->data!=x)
p=p->next;
if(p&&p->data==x)
{
printf("查找到的结点为:%d\n",p->data);
return p;
}
else
{
printf("未找到目标结点\n");
return h;
}
}
Lnode *DeleteNum(Lnode *h)
{
int i;
printf("请输入要删除的结点元素的序号:");
scanf("%d",&i);
LLnode q,p=h;
int j=0;
while(p->next&&j<i)
{
j++;
p=p->next;
}
if(p->next&&j==i)
{
q=p->next;
p->next=q->next;
printf("目标结点已删除\n");
return q;
free(q);
}
else
{
printf("未找到目标结点\n");
return h;
}
}
Lnode *DeleteData(Lnode *h)
{
int x;
printf("请输入要删除的结点元素:");
scanf("%d",&x);
Lnode *q,*p=h;
while(p->next&&p->next->data!=x)
p=p->next;
q=p->next;
if(q&&q->data==x)
{
printf("目标结点已删除\n");
p->next=q->next;
return q;
free(q);
}
else
{
printf("未找到目标结点\n");
return h;
}
}
void ShowListData(Lnode *p)
{
Lnode *q=p->next;
while(q)
{
printf("%d,",q->data);
q=q->next;
}
printf("\n");
}
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void MyString()
{
Lstring head,phead,thead;
int n;
head=(string *)malloc(sizeof(string));
head->next=NULL;
phead=(string *)malloc(sizeof(string));
phead->next=NULL;
thead=(string *)malloc(sizeof(string));
thead->next=NULL;
if(head&&phead)
printf("初始化成功\n");
else
printf("初始化失败\n");
do{
ShowStringMenu();
printf("请输入选择序号1-6:\n");
scanf("%d",&n);
switch(n)
{
case 1:
{
head=assign(head,M);
phead=assignp(phead,N);
thead=assignpp(thead,N);
printf("第一个链表为:");
print(head);
printf("\n");
printf("第二个链表为:");
print(phead);
printf("\n");
printf("第三个链表为:");
print(thead);
printf("\n");
}
break;
case 2:
length(head);
break;
case 3:
catchstr(head,phead);
break;
case 4:
Insertstr(head,thead);
break;
case 5:
print(head);
break;
case 6:
break;
default:
printf("错误,重新输入\n");
}
}while(n!=6);
}
string *assign(string *p,int n)
{
string *q=p,*pp;
int i;
char a[]={'L','o','v','e','\0'};
for(i=0;i<n;i++)
{
pp=(string*)malloc(sizeof(string));
pp->ch=a[i];
pp->next=NULL;
q->next=pp;
q=q->next;
};
return p;
}
string *assignp(string *p,int n)
{
string *q=p,*pp;
int j;
char b[]={"father"};
for(j=0;j<n;j++)
{
pp=(string*)malloc(sizeof(string));
pp->ch=b[j];
pp->next=NULL;
q->next=pp;
q=q->next;
}
return p;
}
string *assignpp(string *p,int n)
{
string *q=p,*pp;
int j;
char b[]={"mother"};
for(j=0;j<n;j++)
{
pp=(string*)malloc(sizeof(string));
pp->ch=b[j];
pp->next=NULL;
q->next=pp;
q=q->next;
}
return p;
}
void print(string *p)
{
string *q=p->next;
while(q)
{
printf("%c",q->ch);
q=q->next;
}
printf("\n");
}
void length(string *p)
{
string *q=p->next;
int i=0;
while(q)
{
i++;
q=q->next;
}
printf("表长为:%d\n",i);
}
void catchstr(string *p,string *tp)
{
string *q=p;
while(q->next)
q=q->next;
q->next=tp->next;
free(tp);
print(p);
}
void Insertstr(string *tp,string *p)
{
string *q=tp,*qq,*pq=p;
int i,j=0;
printf("把p插入到tp中的第i个位置");
scanf("%d",&i);
while(q->next&&j<i)
{
q=q->next;
j++;
}
qq=q->next;
while(pq->next)
pq=pq->next;
if(qq&&j==i)
{
q->next=p->next;
pq->next=qq;
free(p);
printf("\n^^^^^^插入成功^^^^^^^\n");
}
else
printf("位置越界\n");
}
/*★&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&★*/
void MyStack()
{
Lstack p;
int q,i,n;
do{
ShowStackMenu();
printf("请输入选择序号1-6:\n");
scanf("%d",&n);
switch(n)
{
case 1:
{
Initstack(&p);
printf("初始化成功");
printf("\n");
}
break;
case 2:
if(Isempty(*p))
printf("栈空\n");
else printf("栈非空\n");
break;
case 3:
if(Isfull(*p))
printf("栈满\n");
else printf("栈非满\n");
break;
case 4:
printf("请输入4个数字:\n");
for(i=0;i<4;i++)
{
scanf("%d",&q);
Push(p,q);
}
break;
case 5:
printf("栈长为:");
printf("%d\n",Measurestack(*p));
break;
case 6:
printf("获取栈顶元素:");
printf("%d\n",Gettop(*p));
break;
case 7:
printf("出栈:");
for(i=0;i<4;i++)
printf("%d,",Pop(p));
printf("\n");
break;
case 8:
break;
default:
printf("错误,重新输入\n");
}
}while(n!=8);
}
/*另一种初始化方式:
stack *Initstack(stack *s)
{
s=(stack*)malloc(sizeof(stack));
s->top=0;
return s;
}*/
void Initstack(stack **s)
{
(*s)=(stack*)malloc(sizeof(stack));
(*s)->top=0;
}
bool Isempty(stack s)
{
if(s.top==0)
return true;
else return false;
}
bool Isfull(stack s)
{
if(s.top==MAXSIZE)
return true;
else return false;
}
void Push(stack *s,int x)
{
if(!Isfull(*s))
{
s->data[s->top]=x;
s->top++;
}
else printf("栈上溢");
}
int Pop(stack *s)
{
if(!Isempty(*s))
{
s->top--;
return s->data[s->top];
}
else
{
printf("栈下溢");
return ERROR;
}
}
int Gettop(stack s)
{
if(!Isempty(s))
return s.data[s.top-1];
else
{
printf("栈空");
return ERROR;
}
}
int Measurestack(stack s)
{
return s.top;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -