跪求数据结构兼C语高手啊!!!帮个忙啊!!谢谢啦!! 10

(1)线性表的基本操作第一步:定义线性表的存储结构。第二步:编写线性表操作的具体函数定义。第三步:使用定义的线性表并调用线性表的一些操作,实现具体运算。1)初始化线性表2... (1)线性表的基本操作 第一步:定义线性表的存储结构。
第二步:编写线性表操作的具体函数定义。
第三步:使用定义的线性表并调用线性表的一些操作,实现具体运算。
1)初始化线性表
2)创建一个线性表。
3)在线性表中查找指定的元素。
4)在线性表中插入指定值的元素。
5)在线性表中删除指定位置的元素。
6)输出线性表。
好心人帮帮我啊!谢谢谢谢啦
环境是win-TC
展开
 我来答
随便asdq
2011-12-29 · 超过18用户采纳过TA的回答
知道答主
回答量:33
采纳率:100%
帮助的人:19.4万
展开全部
/*写好了一个,不知道是不是符合你的意思。不过运行过,可以,我的环境是gcc;
我不是很会,所以写的不好,有错的话给请我说一下*/

#include <stdio.h>
#include <malloc.h>

struct stu
{
int i;
struct stu * next;
};
enum BOOL//因为的gcc没有布尔值,只有自已写
{
true = 1,
false = 0
};

struct stu * initial();
void show(struct stu * head);
struct stu * delete(struct stu * head);
struct stu * insert(struct stu * head);
enum BOOL empty(struct stu * head);
int iLengh(struct stu * head);

int main()
{
struct stu *head;

head = initial();
show(head);
head = insert(head);
show(head);
head = delete(head);
show(head);

return 0;
}

struct stu * initial()
{
struct stu * head = NULL, * p1, *p2;

p2 = p1 = (struct stu * )malloc(sizeof(struct stu));
printf("请输入数据,并以零结束\n");
scanf("%d",&(p1->i));
if(p1->i == 0)
return head;
while(p1->i != 0)
{
if(head == NULL)
{
head = p1;
}
p2->next = p1;
p2 = p1;
p1 = (struct stu *)malloc(sizeof(struct stu));
printf("请输入数据,并以零结束\n");
scanf("%d",&(p1->i));
}
p2->next = NULL;
free(p1);

return head;
}

enum BOOL empty(struct stu * head)
{
if(head == NULL)
return true;
else
return false;
}

void show(struct stu * head)
{
if(empty(head))
{
printf("链表为空,无法输出\n");
return ;
}
while(head != NULL)
{
printf(" %d ", head->i);
head = head->next;
}
printf("\n");
}

int iLengh(struct stu * head)
{
int i = 0;

if(empty(head))
return 0;
while(head != NULL)
{
head = head->next;
i++;
}
return i;
}

struct stu * insert(struct stu * head)
{
struct stu * p1, *p2;
int i, j, lengh;

p1 = head;
p2 = (struct stu *)malloc(sizeof(struct stu));
if(empty(head))
{
printf("链表为空,无法插入\n");
return head;
}
lengh = iLengh(head);
printf("链表长度是 %d ,请输入你要插入的位置", lengh);
scanf("%d", &j);
printf("请输入你要插入数据\n");
scanf("%d", &(p2->i));

if(j == 1)
{
p2->next = p1;
return p2;
}
if(j == lengh + 1)
{
while(p1->next != NULL)
{
p1 = p1->next;
}
p1->next = p2;
return head;
}
for(i = 0; i < j -2; ++i)
{
p1 = p1->next;
}
p2->next = p1->next;
p1->next = p2;
return head;
}

struct stu * delete (struct stu * head)
{
struct stu * p1, *p2;
int lengh, i, j;

p1 = head;
if(empty(p1))
{
printf("链表为空,无法删除\n");
return head;
}
lengh = iLengh(p1);
printf("链表长度是 %d ,请输入你要删除的位置\n", lengh);
scanf("%d", &j);

if(j == 1)
{
head = head->next;
free(p1);
return head;
}
if(j == lengh)
{
for(i = 0; i < lengh - 2; ++i)
{
p1 = p1->next;
}
free(p1->next);
p1->next = NULL;
return head;
}
for(i = 0; i < j - 2; ++i)
{
p1 = p1->next;
}
p2 = p1->next;
p1->next = p2->next;
free(p2);
return head;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式