一道关于C语言的链表的题目,求纠错
while((temp0-next)!=NULL)
temp0=temp0-next; //找到表尾
temp0-next=head; //连接表头表尾。。。
…………….大括号呢??
C语言 链表 这个题目怎么做?
#include stdio.h
#include malloc.h
struct list {
int ID;
struct list *next;
};
struct list *CreateList() {
int num,i;
struct list *head,*p;
scanf(“%d”,num);//num: 链表结点个数
head = p = (struct list *)malloc(sizeof(struct list));//这是链表的头结点
i = 0;
while (i num) {
p-next = (struct list *)malloc(sizeof(struct list));
scanf(“%d”,p-next-ID);
p = p-next;
i++;
}
p-next = NULL;
return (head);
}
int main () {
struct list * head;
head = CreateList();
return 0;
}
链表习题(C语言)
设链表长度为n,找到倒数第m个元素(约定0为最后一个元素),也就是找到正数第n – m – 1个元素,计数方法当然也是从0开始。
#include stdio.h
#include stdlib.h
typedef int DataType;
typedef struct list {
DataType elem;
struct list *next;
}*LIST,*pNode;
LIST InitList() {
LIST L = (pNode)malloc(sizeof(struct list));
L-elem = 0;
L-next = NULL;
return L;
}
void CreateList(LIST L, DataType a[], int n) {
int i;
pNode p = L;
for(i = 0; i n; ++i) {
p-next = (pNode)malloc(sizeof(struct list));
p-next-elem = a[i];
p = p-next;
}
p-next = NULL;
}
int lenList(LIST L) { // 求取表长
int len = 0;
pNode p = L-next; // 有头结点
while(p) { ++len; p = p-next; }
return len;
}
int GetData(LIST L,int m,DataType *e) {
int i = -1,len = lenList(L);
pNode p = L-next;
if(m 0 || m len – 1) {
printf(“没有第 %d 个元素。\n”,m);
return 0;
}
while(i len – m – 1) { ++i; p = p-next; }
*e = p-elem;
return 1;
}
int main() {
DataType arr[] = {16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int n,m,res;
LIST L = InitList();
n = sizeof(arr)/sizeof(arr[0]);
CreateList(L,arr,n);
while(scanf(“%d”,m) == 1) {
if(GetData(L,m,res))
printf(“倒数第 %d 元素是:%d.\n”,m,res);
}
return 0;
}
c语言数据结构题 链表
// 合并链表B到链表A中。要求A是增序表或空表。不破坏B表数据。
void Merge(struct student *A,struct student *B) { // A∪B
struct student *t,*pa,*pb;
int flag;
for(pb = B-next; pb; pb = pb-next) {
flag = 1;
t = (struct student *)malloc(LEN);
*t = *pb;
//memcpy((void *)t, (void *)pb, LEN);
for(pa = A; pa-next flag; pa = pa-next) {
if(pa-next-num = t-num) {
t-next = pa-next;
pa-next = t;
flag = 0;
}
}
if(flag) {
pa-next = t;
t-next = NULL;
}
}
}
求C语言大神解一下这道简单的链表题
/*Description
给定一串数字,用链表结构进行存储。然后给定针对该链表的若干插入操作,要求将执行插入操作后的结果输出。
Input
第一行:输入一个整数n,表示这串数字有n个(n大于等于1)。
第二行:输入这n个整数。
第三行:输入一个整数m,表示需要执行m个插入操作。
后面m行:每行输入两个整数a和b,表示在这串数字的当前第a个数字之后插入数字b。(假设链表第一个节点编号为1)
Output
输出操作后的n+m个数字。每个数字用空格空开。
Sample Input
3
2 1 3
2
1 5
1 6
Sample Output
2 6 5 1 3
HINT
最后一个输出数字的后面没有空格
*/
#include stdio.h
#include stdlib.h
#include conio.h
//节点结构
struct Node
{
int data; //数据
Node *next; //指向下一个节点
};
//创建链表头部,iData为数据
Node * CreateHead(int iData)
{
Node *pNode = new Node;
if (NULL == pNode) return NULL;
pNode-data = iData;
pNode-next = NULL;
return pNode;
}
//释放内存
void ClearList(Node *pHead)
{
Node *pNode = pHead;
while(NULL != pNode)
{
Node *pNext = pNode-next;
delete pNode;
pNode = pNext;
}
}
//打印链表数据
void PrintList(Node *pHead)
{
Node *pFindNode = pHead;
printf(“\n—————–链表数据打印——————–\n”);
while(NULL != pFindNode)
{
printf(“%d\t”, pFindNode-data);
pFindNode = pFindNode-next;
}
printf(“\n———————-END————————\n”);
}
//插入节点函数,每次都返回链表头节点
Node *InsertData(int index, int data, int size, Node *pHead)
{
int i = 0;
Node *pFindNode = NULL;
Node *pNode = NULL;
//参数检查
if (NULL == pHead) return CreateHead(data);
if((index 1) || (index size)) return NULL;
//创建新节点
pNode = new Node;
if(NULL == pNode) return NULL;
pNode-data = data;
pNode-next = NULL;
//定位插入节点
pFindNode = pHead;
while(((index–) 1) (NULL != pFindNode-next))pFindNode = pFindNode-next;
//执行插入操作
Node *pNext = pFindNode-next;
pFindNode-next = pNode;
pNode-next = pNext;
return pHead;
}
int main(void)
{
int i = 0; //链表索引
int iData = 0; //节点存储数据
Node *pHead = NULL; //链表首部
int N = 0; //链表初始个数
int M = 0; //插入数据的个数
int size = 0; //链表的当前数据个数
//输入链表的初始元素个数
printf(“请输入链表的容量(正整数0):”);
scanf(“%d”, N);
//插入初始的数据
printf(“请输入%d个整数(以空格分开):”, N);
for(i = 0; i N; ++i)
{
scanf(“%d”, iData);
pHead = InsertData(i, iData, size, pHead); //开始插入节点,初次会创建头部
size++;//当前链表元素个数增1
}
//输入插入操作的次数
printf(“请输入插入整数的个数(正整数0):”);
scanf(“%d”, M);
//执行插入操作
while((M–) 0)
{
printf(“请输入一组插入操作(1=index=%d data):”, N);
scanf(“%d%d”, i,iData);
pHead = InsertData(i, iData, size, pHead);
size++;
}
//打印数据
PrintList(pHead);
//清空内存
ClearList(pHead);
getch();
return 0;
}