解题思路:
注意事项:
参考代码:
#include<stdio.h> #include<malloc.h> #define ElemType int //假定线性表中数据元素为int类型 typedef struct LNode{ ElemType data; //结点的数据域 struct LNode *next; //结点的指针域 }LNode, *LinkList; //访问线性链表 void ListTraverse_L(LinkList L, void (*visit)(ElemType)) { /*声明指针p(用于指 向当前访问数据元素) */ LNode *p; /* 将p定位于L中的首元结点 */ p=L->next; /* 若p指向的结点存在 */ while(p) { /* 调用visit()方法进行访问该结点 */ visit(p->data); /* p指向下一个结点 */ p=p->next; } } //线 性链表的读取 int GetElem_L(LinkList L, int i, ElemType *e) { /* 初始化,p指向第一个结点,j为计数器*/ LinkList p = L->next; int j = 1; /* 顺指针向后查找,直到 p指向第 i个元素或 p 为空 */ while (p && j<i ) { p = p->next; j++; } if( !p || i<1 ) return 0; // 第 i 个元素不存在 *e = p->data; // 取第 i 个元素 return 1; } //线性链表插入算法 int ListInsert_L(LinkList L, int i, ElemType e){ /*在线性链表L中第 i个位 置之前插入新元素e*/ LinkList p,s; int j; if(i<1) return 0; //1.寻找第i-1个结点 p=L; j=0; while(p && j<i-1){ p=p->next; ++j; } if( !p ) return 0; //i大于表长加1 //2.生成新结点 s=(LinkList) malloc(sizeof(LNode)); s->data=e; //3.插入L中 s->next=p->next; p->next=s; return 1; } //线性链表的删除 int ListDelete_L(LinkList L,int i, ElemType *e) { /*在带头结点的单链表L中删 除第i个元素,并由e返回其值 成功删除返回1,否则返回0*/ LinkList p,q; int j=0; /* 1.寻找第i个结点,并令p指向 其前趋 */ p = L; while (p->next && j < i-1) { p = p->next; ++j; } if (!(p->next) || i<1) return 0; /*删除位置非法*/ q = p->next; p->next = q->next; *e = q->data; free(q); return 1; } //建立线性链表 //逆位序输入n个元素的值,建立带头结点的单链线性表L LinkList CreateList_L(int n) { LinkList L,p; //1. 建立一个带头结点的单链表 L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; //2. 逆位序生 成n个新结点 ElemType e; while(n--) { scanf("%d",&e); p=(LNode*)malloc(sizeof(LNode)); p->data=e; p- >next=L->next; L->next=p; } return L; }
0.0分
3 人评分
C二级辅导-分段函数 (C语言代码)浏览:912 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:757 |
C二级辅导-公约公倍 (C语言代码)浏览:2158 |
C语言训练-角谷猜想 (C++代码)(3N+1问题)浏览:1850 |
弟弟的作业 (C++代码)浏览:1342 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:561 |
IP判断 (C语言代码)浏览:819 |
字符逆序 (C语言代码)浏览:506 |
1124题解浏览:630 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:420 |