|
5鱼币
#include "stdio.h"
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}slink;
slink *cresclink(int n)
{
slink *head,*p,*s;
int i;
p=head=(slink *)malloc(sizeof(slink));
for(i=1;i<=n;i++)
{
s=(slink *)malloc(sizeof(slink));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=head;
return head;
}
int insert(slink *head,int i,ElemType x)
{
slink *p,*q;int j;
if(i<1)return 0;
p=head;j=0;
while(p->next!=head&&j<i-1)
{p=p->next;j++;}
if((p->next!=head)||(p->next==head&&j==i-1))
{
q=(slink *)malloc(sizeof(slink));
q->data=x;
q->next=p->next;
p->next=q;
return 1;
}
else return 0;
}
int delete(slink *head,int i,ElemType *e)
{
slink *p,*q;int j;
p=head;j=0;
while(p->next!=head&&j<i-1)
{p=p->next;j++;}
if(p->next==head)return 0;
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
return 1;
}
void list(slink *head)
{
slink *p=head->next;
while(p!=head)
{printf("%4d",p->data);
p=p->next;}
printf("\n");
}
int main()
{
int n;
printf("please input n:");
scanf("%d",&n);
return 0;
}
问一下这个int main()里要填入些什么东西,基本不懂代码完全按照课本上面打的 建立的是一个带头结点单向循环链表 插入元素 删除元素 输出带头结点的单链表
不是你的代码
尝试仔细分析代码写写注释。
尝试把代码格式化好,不要给自已添堵。
- #include <stdio.h>
- #include <stdlib.h>
- typedef int ElemType;
- typedef struct node
- {
- ElemType data;
- struct node *next;
- }slink;
- slink *cresclink(int n)
- {
- slink *head, *p, *s;
- int i;
- p = head = (slink *)malloc(sizeof(slink));
- for(i=1; i<=n; i++)
- {
- s = (slink *)malloc(sizeof(slink));
- scanf("%d", &s->data);
- p->next = s;
- p = s;
- }
- p->next = head;
- return head;
- }
- int insert(slink *head, int i, ElemType x)
- {
- slink *p,*q;
- int j;
- if(i<1) return 0;
- p=head; j=0;
- while( p->next!=head && j<i-1)
- {
- p = p->next;
- j++;
- }
- if( (p->next!=head) || (p->next==head && j==i-1) )
- {
- q = (slink *)malloc(sizeof(slink));
- q->data = x;
- q->next = p->next;
- p->next = q;
- return 1;
- }
- else return 0;
- }
- int delete(slink *head, int i, ElemType *e)
- {
- slink *p, *q;
- int j;
- p=head; j=0;
- while( p->next!=head && j<i-1 )
- {
- p = p->next;
- j++;
- }
- if(p->next==head) return 0;
- q = p->next;
- p->next = q->next;
- *e = q->data;
- free(q);
- return 1;
- }
- void list(slink *head)
- {
- slink *p = head->next;
- while( p!=head )
- {
- printf("%4d",p->data);
- p=p->next;
- }
- printf("\n");
- }
- int main()
- {
- int n, i, e;
- slink *head; // 声明头指针
- printf("please input n:");
- scanf("%d",&n);
- // 1.创建链表
- head = cresclink(n); // 该函数返回的是 头指针
- // 2.通常创建好后就把数据显示一遍
- list(head); // 把头指针传进入
- // 3. 测试 插入 功能
- printf("请输入要插入元素(位置 元素):");
- scanf("%d", &i);
- scanf("%d", &e);
- if(insert(head, i, e)) // 参数(头指针,插入位置, 要插入的元素),返回值1成功,0失败
- {
- printf("在位置%d插入%d成功。\n", i, e);
- }
- else
- {
- printf("%d插入失败!\n");
- }
- // 4. 数据显示一遍
- list(head);
- // 5. 测试 删除 功能
- printf("请输入要删除元素的位置:");
- scanf("%d", &i);
- if(delete(head, i, &e)) // 参数(头指针,要删除的位置, 返回删除的元素),返回值1成功,0失败
- {
- printf("删除位置%d的元素%d成功。\n", i, e);
- }
- else
- {
- printf("位置%d的元素失败!\n", i);
- }
- // 6. 数据显示一遍
- list(head);
- return 0;
- }
复制代码
|
最佳答案
查看完整内容
不是你的代码
尝试仔细分析代码写写注释。
尝试把代码格式化好,不要给自已添堵。
|