【精品】线性表可能达到的最大长度20【精品】线性表可能达到的最大长度20
#include
#include
#define MAXSIZE 100 //线性表可能达到的最大长度 #define OK 1
#define ERROR 0
typedef struct Node /* 结点类型定义 */
{
int data;
struct Node *next;
}Node, *LinkList;/* LinkList为结构指针类型*/
LinkList CreateFromHead(); LinkList CreateFromTail();...
【精品】线性表可能达到的最大长度20
#include
#include
#define MAXSIZE 100 //线性表可能达到的最大长度 #define OK 1
#define ERROR 0
typedef struct Node /* 结点类型定义 */
{
int data;
struct Node *next;
}Node, *LinkList;/* LinkList为结构指针类型*/
LinkList CreateFromHead(); LinkList CreateFromTail();
int print(LinkList L); Node *Get (LinkList L, int i); int Insert(LinkList L,int i,int e);
int DelList(LinkList L,int i,int *e);
void main()
{
char c;
int i=0,e=0,j; //插入的位置i, 插入的值e.
int a=0;
int *f;
f=&a;
LinkList S;
printf("**************************\n");
printf("头插法创建线性表请按1\n");
printf("尾插法创建线性表请按2\n");
printf("输出建线性表请按3\n");
printf("插入元素请按4\n");
printf("删除元素请按5\n");
printf("退出请按e\n");
do{
c=getchar();
switch(c)
{
case '1':S=CreateFromHead();
break;
case '2':S=CreateFromTail();
break;
case '3':j=print(S);
printf("\n链表长度: %d\n",j);
break;
case '4':printf("\n请输入待插入的地址 i:\n");
scanf("%d",&i);
printf("\n请输入待插入的值 e:\n");
scanf("%d",&e);
if(Insert(S,i,e))
printf("\n插入成功。\n");
// esle printf("\n插入插入失败。\n");
break;
case '5':printf("\n请输入待删除元素的地址 i:");
scanf("%d",&i);
if(DelList(S,i,f))
{
printf("\n删除成功。\n");
printf("\n删除的元素值是%d.\n",*f);
}
break;
default: printf("头插法创建线性表请按1\n");
printf("尾插法创建线性表请按2\n");
printf("输出建线性表请按3\n");
printf("插入元素请按4\n");
printf("删除元素请按5\n");
printf("退出请按e\n");
break;
}
}while(c!='e');
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请输入链表的长度:\n");
scanf("%d",&a);
printf("\n");
for(i=0;idata=rand();
// printf("%d ,",s->data);
s->next=L->next;
L->next=s;
}
return L;
}
LinkList CreateFromTail()
{/*将新增的字符追加到链表的末尾*/
LinkList L;
Node *r, *s;
int a,i; /* 设置一个标志, 初值为1,当输入"$"时,flag为0,建 表结束 */
L=(Node *)malloc(sizeof(Node)); /* 为头结点分配存储空间 */
L->next=NULL;
r=L; /* r指针始终动态指向链表的当前表尾, 以便于做尾插入, 其初值指向头结点 */
scanf("%d",&a);
for(i=0;idata=rand();
printf("%d ,",s->data);
r->next=s;
r=s;
}
r->next=NULL; /* 将最后一个结点的next链域置为空, 表示链表
的结束 */
return L;
}/*CreateFromTail*/
int print(LinkList L)
{
int k=0;
/* do
{ printf("%d ,",S->data);
S=S->next;
k++;
}while (S->next!=NULL); */
while (L->next!=NULL)
{
L=L->next;
printf("%d ,",L->data);
k++;
}
return (k);
}
Node *Get (LinkList L, int i) /* 在带头结点的单链表L中查找第i个结点, 若找到(1?i?n), 则返回该结点的存储位
置; */
/* 否则返回NULL */
{ int j;
Node *p;
p=L; j=0;
while (p->next!=NULL&&jnext;
j++;
}
if(i==j) return p; /* 找到了第i个结点 */
else return NULL; /* 找不到, i?0或i>n */ }
int Insert(LinkList L,int i,int e)
{
Node *pre,*s;
int k;
pre=L; k=0;
while(pre!=NULL&&knext;
k++;
}
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&&knext;
k=k+1;
}
if(k!=i-1)
{
printf("删除结点的位置i不合理~");
return ERROR;
}
r=p->next;
p->next=p->next->next;
*e=r->data;
free(r);
return OK;
}
本文档为【【精品】线性表可能达到的最大长度20】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。