c语言用单链表基本操作实现
实验内容:建立10个数据元素的线性表L={1,2,3…10}指定在第2位置插入元素25,然后删除第4个位置上的元素,分别显示各步骤结果#include<stdio.h>#...
实验内容:建立10个数据元素的线性表L={1,2,3…10}指定在第2位置插入元素25,然后删除第4个位置上的元素,分别显示各步骤结果
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
} LNode,*LinkList;
void inilialist(LNode **L)
{
if((*L=(LNode *)malloc(sizeof(LNode)))==NULL)exit(1);
(*L)->next=NULL;
}
void insert(LNode *L,int i,ElemType x)
{
LNode *s,*p=L;
int j=0;
while(j!=(i-1)&&p!=NULL)
{p=p->next;
j++;
}
if(p==NULL)
{printf("序号出错!");
}
else
{if((s=(LNode*)malloc(sizeof(LNode)))==NULL) exit(1);
s->data=x;
s->next=p->next;
p->next=s;
}
}
void Delete(LNode *L,int i)//删除值为x的结点
{
LNode *p;
LNode *u;
int j=0;
p=L;
while(j!=i-1&&p!=NULL)
{p=p->next;
j++;}
if(p==NULL||p->next==NULL)
{printf("删除序号出错!");
}
else
{u=p->next;
p->next=u->next;
free(u);
}
}
void main(){
//your code will be written here6 /*这里是所要补充代码的地方
} 展开
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
} LNode,*LinkList;
void inilialist(LNode **L)
{
if((*L=(LNode *)malloc(sizeof(LNode)))==NULL)exit(1);
(*L)->next=NULL;
}
void insert(LNode *L,int i,ElemType x)
{
LNode *s,*p=L;
int j=0;
while(j!=(i-1)&&p!=NULL)
{p=p->next;
j++;
}
if(p==NULL)
{printf("序号出错!");
}
else
{if((s=(LNode*)malloc(sizeof(LNode)))==NULL) exit(1);
s->data=x;
s->next=p->next;
p->next=s;
}
}
void Delete(LNode *L,int i)//删除值为x的结点
{
LNode *p;
LNode *u;
int j=0;
p=L;
while(j!=i-1&&p!=NULL)
{p=p->next;
j++;}
if(p==NULL||p->next==NULL)
{printf("删除序号出错!");
}
else
{u=p->next;
p->next=u->next;
free(u);
}
}
void main(){
//your code will be written here6 /*这里是所要补充代码的地方
} 展开
展开全部
补充销毁链表、打印链表内容的两个函数。主函数已补上建立、插入、删除、打印诸代码。
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node *next;
} LNode, *LinkList;
void inilialist (LNode **L) {
if((*L=(LNode *)malloc(sizeof(LNode)))==NULL)
exit(1);
(*L)->next=NULL;
}
/* 销毁 */
/* 初始条件:单链表L已存在。操作结果:销毁单链表L */
void destroyList (LinkList L) {
LinkList p, q;
p = L->next; /* p指向第一个结点 */
while (p) { /* 没到表尾 */
q = p->next;
free (p);
p = q;
}
free (L);
}
void insert (LNode *L, int i, ElemType x) {
LNode *s, *p=L;
int j=0;
while(j!=(i-1)&&p!=NULL) {
p=p->next;
j++;
}
if(p==NULL) {
printf("序号出错!");
}
else {
if((s=(LNode*)malloc(sizeof(LNode)))==NULL)
exit(1);
s->data=x;
s->next=p->next;
p->next=s;
}
}
void Delete (LNode *L, int i) { //删除值为x的结点
LNode *p;
LNode *u;
int j=0;
p=L;
while(j!=i-1&&p!=NULL) {
p=p->next;
j++;
}
if (p==NULL||p->next==NULL) {
printf("删除序号出错!");
}
else {
u=p->next;
p->next=u->next;
free(u);
}
}
/* 打印链表内容 */
/* 初始条件:单链表L已存在。操作结果:当链表不为空时,打印链表内容并返回OK,否则返回ERROR */
int printList (LinkList L) {
LinkList p = L->next; /* p指向第一个结点 */
while (p) {
printf ("%d\t", p->data);
p = p->next;
}
putchar ('\n');
return 1;
}
int main (void) {
LinkList L;
int i;
/* 初始化单链表 */
inilialist (&L);
/* 插入10个元素 */
printf ("建立10个数据元素的线性表:\n");
for (i=1; i<=10; i++)
insert (L, i, i);
printList (L);
putchar ('\n');
puts ("第2位置插入元素25:");
insert (L, 2, 25);
printList (L);
putchar ('\n');
puts ("删除第4个位置上的元素:");
Delete (L, 4);
printList (L);
putchar ('\n');
destroyList (L);
getch (); /* 屏幕暂留 */
return 0 ;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询