📄 线形链表.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 //线性表可能达到的最大长度
#define ERROR 0
#define OK 1
typedef struct Node /* 结点类型定义 */
{
int data;
struct Node *next;
}Node, *LinkList;/* LinkList为结构指针类型*/
LinkList CreateFromHead();
LinkList CreateFromTail();
Node *Get (LinkList L, int i);
int InsList(LinkList L, int i, int e);
int DelList(LinkList L,int i, int *e);
int len;
LinkList pre;
void main()
{
int c, i, j , flag, *b, aa;
b=&aa;
LinkList S;
Node *q;
do{
printf("头插法创建线性表请按1\n");
printf("尾插法创建线性表请按2\n");
printf("查找第i个结点请按3\n");
printf("插入元素请按4\n");
printf("删除元素请按5\n");
printf("退出请按6\n");
scanf("%d",&c);
switch(c)
{
case 1:S=CreateFromHead();
printf("头插法创建线性表已经完成,创建的线性表为:\n");
while(S->next!=NULL)
{
printf("%d ",S->next->data);
S = S->next;
}
printf("\n");
break;
case 2:S=CreateFromTail();
printf("尾插法创建线性表已经完成,创建的线性表为:\n");
while(S->next!=NULL)
{
printf("%d ",S->next->data);
S = S->next;
}
printf("\n");
break;
case 3: S=CreateFromHead();
printf("头插法创建线性表已经完成,创建的线性表为:\n");
while(S->next!=NULL)
{
printf("%d ",S->next->data);
S = S->next;
}
printf("\n");
printf("输入要查找的是第几个结点:");
scanf("%d",&i);
q=Get (S, i);
printf("查找到的元素是:%d",q->data);
break;
case 4: S=CreateFromHead();
printf("头插法创建线性表已经完成,创建的线性表为:\n");
while(S->next!=NULL)
{
printf("%d ",S->next->data);
S = S->next;
}
printf("\n");
printf("输入要插入的是第几个结点:");
scanf("%d",&i);
printf("输入要插入的元素:");
scanf("%c",&j);
InsList(S,i,j);
printf("插入后的链表为:");
while(S->next!=NULL)
{
printf("%d ",S->next->data);
S = S->next;
}
printf("\n");
break;
case 5: S=CreateFromHead();
printf("头插法创建线性表已经完成,创建的线性表为:\n");
while(S->next!=NULL)
{
printf("%d ",S->next->data);
S = S->next;
}
printf("\n");
printf("输入要删除的是第几个结点:");
scanf("%d",&i);
flag=DelList(S,i, &j);
if(flag)
{
aa=j;
printf("删除的元素是:%d",b);
}
break;
default: break;
}
printf("\n");
}while(c!=5);
printf("*\n");
}
LinkList CreateFromHead()
{
LinkList L;
Node *s;
int a,i;
int flag=1;
/* 设置一个标志变量flag,初值为1,当输入"$"时,将flag置为0, 建表结束 */
L=(LinkList)malloc(sizeof(Node)); /* 为头结点分配存储空间*/
L->next=NULL;
printf("请输入要创建线性表的长度\n");
scanf("%d",&a);
for(i=0;i<a;i++)
{
s=(Node*)malloc(sizeof(Node)); /* 为读入的字符分配存储空间 */
s->data=rand();
s->next=L->next;
L->next=s;
}
len = a;
return L;
}
LinkList CreateFromTail()
{
LinkList L;
char c;
int a,i;
Node *s,*r;
int flag=1;
/* 设置一个标志变量flag,初值为1,当输入"$"时,将flag置为0, 建表结束 */
L=(Node *)malloc(sizeof(Node)); /* 为头结点分配存储空间*/
L->next=NULL;
r=L;
printf("请输入要创建线性表的长度\n");
scanf("%d",&a);
for(i=0;i<a;i++)
{
s=(Node*)malloc(sizeof(Node)); /* 为读入的字符分配存储空间 */
s->data=rand();
s->next=s;
r=s;
}
len = a;
/* while(flag)
{
c=getchar();
if(c!='$')
{
s=(Node *)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}/*while*/
return L;
}
Node *Get (LinkList L, int i)
{
int j;
Node *p;
p=L;j=0;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(i==j)
{
return p;
}
else return NULL;
}
int InsList(LinkList L, int i, int e)
{
Node *pre,*s;
int k;
pre=L;k=0;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(k!=i-1)
{
printf("插入位置不合理!");
return ERROR;
}
s=(Node *)malloc(sizeof(Node));
s->data=e;
s->next=pre->next;
pre->next=s;
return OK;
}
int DelList(LinkList L,int i, int *e)
{
Node *p,*r;
int k;
p=L;k=0;
while(p->next!=NULL&&k<i-1)
{
p=p->next;
k++;
}
if(k!=i-1)
{
printf("删除结点的位置i不合理!");
return ERROR;
}
r=p->next;
p->next=p->next->next;
*e=r->data;
free(r);
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -