关于链表的C语言实现·链表操作·多项式加减法·dll封装

链表操作(初级)

一、实验目的

掌握链表的基本算法并完成对链表各个功能的实现

二、实验内容

链表的基本运算实现,要求至少具有以下功能:

  • 链表建立
  • 插入运算
  • 删除运算
  • 查找运算
  • 判断是否为空
三、实验代码(包括运行结果截图)
1.	#include<stdio.h>  
2.	#include<stdlib.h>  
3.	  
4.	/*定义*/  
5.	typedef int DataType;  
6.	struct Node{  
7.	    int n;  
8.	    DataType info;  
9.	    struct Node *link;  
10.	};  
11.	typedef struct Node *LinkList;  
12.	typedef struct Node *PNode;  
13.	  
14.	LinkList initLinkList()  
15.	{  
16.	    LinkList head;  
17.	    head = (LinkList)malloc(sizeof(struct Node));  
18.	    if (head == NULL)  
19.	    {  
20.	        printf("内存分配失败!\n");  
21.	        return 0;  
22.	    }  
23.	    head->link = NULL;  
24.	    return head;  
25.	}  
26.	  
27.	/*创建链表*/  
28.	void createLinkList(LinkList head)  
29.	{  
30.	    LinkList rear;  
31.	    PNode p;  
32.	    head->n = 0;  
33.	    int m;  
34.	    rear = head;  
35.	    scanf_s("%d", &m);  
36.	    while (m != -1)  
37.	    {  
38.	        p = (PNode)malloc(sizeof(struct Node));  
39.	        p->info = m;  
40.	        p->link = NULL;  
41.	        rear->link = p;  
42.	        rear = p;  
43.	        head->n ++ ;  
44.	        scanf_s("%d", &m);  
45.	    }  
46.	}  
47.	  
48.	/*插入运算*/  
49.	/*查找i所在节点p*/  
50.	PNode Locate_i(LinkList llist, int i)  
51.	{  
52.	    PNode p; int count = 0;  
53.	    p = llist->link;  
54.	    While (Count < i)  
55.	    {  
56.	        p = p->link;  
57.	        count++;  
58.	    }  
59.	    return p;  
60.	}  
61.	  
62.	/*判断是否为空*/  
63.	int isEmptyLinkList(LinkList llist)  
64.	{  
65.	    return (llist->link == NULL);  
66.	}  
67.	  
68.	/*查找p所指结点的前驱结点*/  
69.	PNode locatePre_link(LinkList llist, PNode p)  
70.	{  
71.	    PNode p1;  
72.	    if (isEmptyLinkList(llist))  
73.	        return 0;  
74.	    p1 = llist;  
75.	    while (p1 != NULL&&p1->link != p)  
76.	        p1 = p1->link;  
77.	    return p1;  
78.	}  
79.	  
80.	/*后插法*/  
81.	int insertPost_link(LinkList llist, PNode p, DataType x)  
82.	{  
83.	    PNode q = (PNode)malloc(sizeof(struct Node));  
84.	    if (q == NULL)  
85.	    {  
86.	        printf("out of space!\n");  
87.	        return 0;  
88.	    }  
89.	    Else  
90.	    {  
91.	        q->info = x;  
92.	        q->link = p->link;  
93.	        p->link = q;  
94.	        return 1;  
95.	    }  
96.	}  
97.	  
98.	/*前插法*/  
99.	int insertPre_link(LinkList llist, PNode p, DataType x)  
100.	{  
101.	    PNode p1 = (PNode)malloc(sizeof(struct Node));  
102.	    if (p1 == NULL)  
103.	        return 0;  
104.	    p1 = llist;  
105.	    while (p1 != NULL&&p1->link != p)  
106.	        p1 = p1->link;  
107.	    insertPost_link(llist, p1, x);  
108.	    return 1;  
109.	}  
110.	  
111.	/*删除运算*/  
112.	int deleteLinkList(LinkList llist, DataType x)  
113.	{  
114.	    PNode p, q;  
115.	    p = llist;  
116.	    if (p == NULL)  
117.	        return 0;  
118.	    while (p->link != NULL&&p->link->info != x)  
119.	        p = p->link;/*找值为x的节点的存储位置*/  
120.	    if (p->link == NULL)  
121.	    {  
122.	        printf("No exist!\n");  
123.	        return 0;  
124.	    }  
125.	    else  
126.	    {  
127.	        q = p->link;  
128.	        p->link = q->link;  
129.	        free(q);  
130.	        return 1;  
131.	    }  
132.	}  
133.	  
134.	/*查找运算*/  
135.	PNode findLinkList(LinkList llist, DataType x)  
136.	{  
137.	    PNode p;  
138.	    if (llist == NULL)  
139.	        return 0;  
140.	    p = llist->link;  
141.	    while (p != NULL&&p->info != x)  
142.	        p = p->link;  
1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值