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语言课程设计链表的两个问题。。(高分求助) 非常急。。。。!!。