C语言链表问题。。【在线等】【急】

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言链表问题。。【在线等】【急】相关的知识,希望对你有一定的参考价值。

1、编程实现建立一个带有头结点的单链表,头结点的数据成员存放了该链表中的结点个数,如图2.2所示:

2、编程实现链表的逆序,要求在原有结点空间上实现,如图2.3所示:

/*
以下内容仅供参考!
第一题:
*/

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct Node

int data;
struct Node * pNext;
NODE,* PNODE;

PNODE create_list(void);//创建一个链表
void traverse_list(PNODE pHead);//遍历链表

int main(void)

PNODE pHead = NULL;

pHead = create_list();

printf("遍历链表:\n");
traverse_list(pHead);

printf("链表的长度是pHead->data=%d\n",pHead->data);

return 0;


PNODE create_list(void)

int len;//链表中节点数目
int i;
int val;

printf("请输入要创建的链表中节点的个数len=");
scanf("%d",&len);

PNODE pHead = (PNODE)malloc(sizeof(NODE));
pHead->data = len;
if (NULL == pHead)

printf("分配内存失败!程序终止!");
exit(-1);

PNODE pTail = pHead;
pTail->pNext = NULL;

for (i=0;i<len;++i)

printf("请输入第%d个节点的有效数据:",i+1);
scanf("%d",&val);

PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)

printf("分配内存失败!程序终止!");
exit(-1);

pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;


return pHead;

void traverse_list(PNODE pHead)

PNODE p = pHead->pNext ;

while (NULL != p)

printf("%10d",p->data);
p = p->pNext;

printf("\n");

return ;


/*
在vc++6.0中的输出结果:
-------------------
请输入要创建的链表中节点的个数len=3
请输入第1个节点的有效数据:75
请输入第2个节点的有效数据:86
请输入第3个节点的有效数据:92
遍历链表:
75 86 92
链表的长度是pHead->data=3
----------------------
*/

/*第二题*/
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct Node

int data;
struct Node * pNext;
NODE,* PNODE;

PNODE create_list(void);//创建一个链表
void traverse_list(PNODE pHead);//遍历链表
void reverse_link(PNODE pHead);//逆序

int main(void)

PNODE pHead = NULL;

pHead = create_list();

printf("遍历链表:\n");
traverse_list(pHead);
printf("链表的长度是pHead->data=%d\n",pHead->data);

printf("对链表中数据进行逆序排列:\n");
reverse_link(pHead);
printf("逆序排列后输出\n");
traverse_list(pHead);

return 0;


PNODE create_list(void)

int len;//链表中节点数目
int i;
int val;

printf("请输入要创建的链表中节点的个数len=");
scanf("%d",&len);

PNODE pHead = (PNODE)malloc(sizeof(NODE));
pHead->data = len;
if (NULL == pHead)

printf("分配内存失败!程序终止!");
exit(-1);

PNODE pTail = pHead;
pTail->pNext = NULL;

for (i=0;i<len;++i)

printf("请输入第%d个节点的有效数据:",i+1);
scanf("%d",&val);

PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)

printf("分配内存失败!程序终止!");
exit(-1);

pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;


return pHead;

void traverse_list(PNODE pHead)

PNODE p = pHead->pNext ;

while (NULL != p)

printf("%10d",p->data);
p = p->pNext;

printf("\n");

return ;


void reverse_link(PNODE pHead)

PNODE p, q, ptmp;

p = pHead->pNext;
q = pHead->pNext->pNext;

ptmp = NULL;

while (q != NULL)

ptmp = q->pNext;
q->pNext = p;
p = q;
q = ptmp;


pHead->pNext->pNext = NULL;
pHead->pNext = p;

/*
在vc++6.0中的输出结果:
-------------------
请输入要创建的链表中节点的个数len=3
请输入第1个节点的有效数据:1
请输入第2个节点的有效数据:3
请输入第3个节点的有效数据:5
遍历链表:
1 3 5
链表的长度是pHead->data=3
对链表中数据进行逆序排列:
逆序排列后输出
5 3 1
----------------------
*/
参考技术A #include<stdio.h>
#include<malloc.h>
struct sqlist
int data;
struct sqlist * next;
*head;
creat_sqlist(struct sqlist * T, int e)

struct sqlist *q, *p = T;
while(p->next)
p = p->next;

q = (struct sqlist *)malloc(sizeof(struct sqlist));
q->next = NULL;
q->data = e;
p->next=q;
T->data++;

reverse(struct sqlist * T)

struct sqlist *t, *q, *p=T->next;
q=p->next;
p->next=NULL;
while(q)
t = q->next;
T->next=q;
q->next =p;
p=q;
q=t;



int main()

int e;
struct sqlist *p;
head = (struct sqlist *)malloc(sizeof(struct sqlist));
head->next = NULL;
head->data = 0;
printf("input number, 10000 if end\n");
while(1)
scanf("%d", &e);
if(e == 10000)
break;
creat_sqlist(head, e);

p = head->next;
printf("have node:%d\n", head->data);
printf("First the nodes: ");
while(p)
printf("%d ", p->data);
p = p->next;

printf("\n");

reverse(head);
printf("reverse the nodes: ");
p = head->next;
while(p)
printf("%d ", p->data);
p = p->next;

printf("\n");
return 0;
本回答被提问者采纳
参考技术B #include <stdio.h>
#include <stdlib.h>

typedef struct node

int num;
node* next;
Node;

Node* init()

Node* head = (Node*)malloc(sizeof(Node));
head->num = 0;
head->next = NULL;


Node* append(Node* head, int v)

Node* temp = head;
while(temp->next != NULL)

temp = temp->next;

temp->next = (Node*)malloc(sizeof(Node));
temp = temp->next;
temp->num = v;
temp->next = NULL;
head->num++;
return head;


void print(Node* head)

Node* temp = head;
while(temp!=NULL)

printf("%d ",temp->num);
temp = temp->next;

printf("\n");
return;


Node* reverse(Node* head, Node** tail)

Node *temp, *temp2;
if(head->next == NULL)

*tail = head;
return head;

temp = reverse(head->next,&temp2);
temp2->next = head;
head->next = NULL;
*tail = head;
return temp;


int main()

Node* temp;
Node* head = init();
append(head, 75);
append(head, 86);
append(head, 92);
print(head);
head = reverse(head,&temp);
print(head);

关于c语言中remove的问题,在线等,急急急

程序如下:
#include<stdio.h>

FILE *fp;
fp=fopen("c:\\1.dat","w");
fclose(fp);
if(remove("c:\\1.dat")==0)
printf("\n文件已成功删除!\n");
else
printf("抱歉,因为未知原因,文件删除失败……\n");
return 0;

运行总是显示删除失败,
但是如果关闭程序后,再用另一个程序执行
remove(“c:\\1.dat”);
却可以成功删除,这是什么原因????
难道是文件没有关闭成功么???
急急急

代码没问题啊,能删除,我试过了。可能是你已经删除了,所以再次运行删除失败
还有一个原因,这个文件被其他程序用了,才你的程序删除不了吧。
参考技术A 代码没错if语句里的条件改为!=0

以上是关于C语言链表问题。。【在线等】【急】的主要内容,如果未能解决你的问题,请参考以下文章

关于c语言课程设计链表的两个问题。。(高分求助) 非常急。。。。!!。

关于c语言课程设计链表的两个问题。。(高分求助) 非常急。。。。!!。

c语言程序解答(在线等)?

关于c语言中remove的问题,在线等,急急急

用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,还有三门课比如语,数,外的成绩

在VS2019中编写C语言的链表程序出现了C4473等错误,怎么修改?