Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4a3fdca

Browse files
【added】基础题以及循环链表
1 parent 04c0451 commit 4a3fdca

File tree

7 files changed

+182
-0
lines changed

7 files changed

+182
-0
lines changed
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
#include<stdio.h>
2+
#include<stdlib.h>
3+
4+
#define OK 1
5+
#define ERROR 0
6+
7+
typedef struct Node
8+
{
9+
int data;
10+
struct Node *pNext;
11+
}NODE, *pNODE;
12+
//��������ѭ������
13+
pNODE createList(void){
14+
pNODE pHead = (pNODE)malloc(sizeof(NODE));
15+
pNODE pTail=NULL;
16+
if(pHead==NULL){
17+
printf("�ڴ����ʧ�ܣ�\n");
18+
}
19+
pHead->data=0;
20+
pHead->pNext=pHead;//���һ��������ָ��ͷ��㣬����һ��ѭ������
21+
pTail=pHead;
22+
return pHead;
23+
}
24+
//��ӡ����
25+
void TraverseSgCcLinkList(pNODE pHead)
26+
{
27+
pNODE pt = pHead->pNext;
28+
29+
printf("������ӡ�磺");
30+
while (pt != pHead)
31+
{
32+
printf("%d ", pt->data);
33+
pt = pt->pNext;
34+
}
35+
putchar('\n');
36+
}
37+
//�ж������Ƿ�Ϊ��
38+
int IsEmptySgCcLinkList(pNODE pHead)
39+
{
40+
if (pHead->pNext == pHead)
41+
return 1;
42+
else
43+
return 0;
44+
}
45+
//������������
46+
int GetLengthSgCcLinkList(pNODE pHead)
47+
{
48+
int length = 0;
49+
pNODE pt = pHead->pNext;
50+
51+
while (pt != pHead)
52+
{
53+
length++;
54+
pt = pt->pNext;
55+
}
56+
return length;
57+
}
58+
//�������в���ڵ�
59+
int InsertEleSgCcLinkList(pNODE pHead, int pos, int data) {
60+
pNODE p_new=NULL;
61+
p_new=(pNODE)malloc(sizeof(NODE));
62+
int j=1;
63+
while(j<pos){
64+
pHead=pHead->pNext;
65+
j++;
66+
}
67+
p_new->data=data;
68+
p_new->pNext=pHead;
69+
pHead->pNext = p_new;
70+
return OK;
71+
72+
}
73+
//ɾ����㣺
74+
int DeleteEleSgCcLinkList(pNODE pHead, int pos) {
75+
pNODE pt =NULL;
76+
int j=1;
77+
while(j<pos){
78+
j++;
79+
pHead=pHead->pNext;
80+
}
81+
pt=pHead->pNext;
82+
pHead->pNext=pt->pNext;
83+
free(pt);
84+
return OK;
85+
}
86+
//ɾ�������������ͷ��ڴ�
87+
void FreeMemory(pNODE *ppHead)
88+
{
89+
pNODE pt = NULL;
90+
91+
while (*ppHead != NULL)
92+
{
93+
if (*ppHead == (*ppHead)->pNext) //���ֻ��ͷ�ڵ�һ��
94+
{
95+
free(*ppHead);
96+
*ppHead = NULL;
97+
}
98+
else //�����ֹͷ�ڵ�һ��
99+
{
100+
pt = (*ppHead)->pNext->pNext;
101+
free((*ppHead)->pNext);
102+
(*ppHead)->pNext = pt;
103+
}
104+
}
105+
}
106+
int main(void) {
107+
int flag = 0, length = 0;
108+
int position = 0, value = 0;
109+
pNODE head = NULL;
110+
head = createList();
111+
flag = IsEmptySgCcLinkList(head);
112+
if (flag)
113+
printf("����ѭ������Ϊ�գ�\n");
114+
else
115+
{
116+
length = GetLengthSgCcLinkList(head);
117+
printf("����ѭ�������ij���Ϊ��%d\n", length);
118+
TraverseSgCcLinkList(head);
119+
}
120+
printf("������Ҫ����ڵ��λ�ú�Ԫ��ֵ(�������ÿո����)��");
121+
scanf("%d %d", &position, &value);
122+
flag = InsertEleSgCcLinkList(head, position, value);
123+
if (flag)
124+
{
125+
printf("����ڵ�ɹ���\n");
126+
TraverseSgCcLinkList(head);
127+
} else
128+
printf("����ڵ�ʧ�ܣ�\n");
129+
flag = IsEmptySgCcLinkList(head);
130+
if (flag)
131+
printf("����ѭ������Ϊ�գ����ܽ���ɾ��������\n");
132+
else
133+
{
134+
printf("������Ҫɾ���ڵ��λ�ã�");
135+
scanf("%d", &position);
136+
flag = DeleteEleSgCcLinkList(head, position);
137+
if (flag)
138+
{
139+
printf("ɾ���ڵ�ɹ���\n");
140+
TraverseSgCcLinkList(head);
141+
}
142+
else
143+
printf("ɾ���ڵ�ʧ�ܣ�\n");
144+
}
145+
146+
FreeMemory(&head);
147+
if (NULL == head)
148+
printf("�ѳɹ�ɾ������ѭ���������ͷ��ڴ���ɣ�\n");
149+
else
150+
printf("ɾ������ѭ������ʧ�ܣ��ͷ��ڴ�δ��ɣ�\n");
151+
152+
return 0;
153+
}
File renamed without changes.

‎题目/初阶题/广义表题.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
### (1)已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( )。答案:head(tail(head(tail(LS)))
2+
```
3+
根据表头、表尾的定义可知:任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,而其表尾必定是子表。
4+
也就是说,广义表的head操作,取出的元素是什么,那么结果就是什么。但是tail操作取出的元素外必须加一个表——" ()"
5+
6+
已知广义表LS=((a,b,c),(d,e,f))
7+
故: tail(LS)=((d,e,f))
8+
head(tail(LS))=(d,e,f)
9+
tail(head(tail(LS)))=(e,f)
10+
head(tail(head(tail(LS))))=e
11+
```
File renamed without changes.
File renamed without changes.

‎题目/初阶题/链表基础题.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
### (1)用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时(**队头、队尾指针都可能要修改**)
2+
#### 当队列中只有一个元素时,出队后需要清空对头和队尾指针。当只有一个元素,出队列时,要将队头和队尾,指向-1.所以说队头和队尾都需要修改。
3+
### (2)在有n个节点的二叉链表中,值为空的链域的个数为(**n+1**)
4+
#### n个结点的二叉链表共有2n个链域,除了根节点以外,其他每个节点都被一个链域所指向,因此用到的链域为n-1个,即空链域个数为:2n - ( n-1) = n+1个
5+
### (3)ArrayLists和LinkedList的区别,下述说法正确的有?答案:ABCD
6+
#### A. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 //正确,这里的所谓动态数组并不是那个" 有多少元素就申请多少空间 "的意思,通过查看源码,可以发现,这个动态数组是这样实现的,如果没指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组。
7+
#### B. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。//正确,ArrayList是数组,所以,直接定位到相应位置取元素,LinkedLIst是链表,所以需要从前往后遍历。
8+
#### C. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。//正确,ArrayList的新增和删除就是数组的新增和删除,LinkedList与链表一致。
9+
#### D. ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。//正确,因为ArrayList空间的增长率为1.5倍,所以,最后很可能留下一部分空间是没有用到的,因此,会造成浪费的情况。对于LInkedList的话,由于每个节点都需要额外的指针,所以,你懂的。
10+
### (4)
11+
#### 1. 如果两个单向链表相交,那他们的尾结点一定相同(对)
12+
##### 单链表的没个节点都具有唯一的前驱节点和唯一的后继节点,所以当两个单链表存在相交的节点时,这两个链表则同时拥有这个节点,以及这个节点的所有后继节点,当这个公共节点是尾节点时,他们则只含有公共一个节点-------尾节点。(就是就是"Y"型状)
13+
#### 2. 快慢指针是判断一个单向链表有没有环的一种方法(对)
14+
##### 快慢指针是判断单链表是否有环的一种方法:两个指针,每次移动的步长为2叫做快指针,每次移动步长为1的指针叫做慢指针。快慢指针同时从头结点出发,当快指针率先到达NULL的时候,则说明此单链表中不存在环,当快指针追上慢指针的时候,说明此单链表中存在环。
15+
#### 3. 有环的单向链表跟无环的单向链表不可能相交(对)
16+
##### 有环的单向链表和无环的单向链表不能相交,因为当相交的时候,无环的单向链表也会被迫存在一个环,只不过这个环的"起点"可能不是原来单向链表的头结点。
17+
#### 4. 如果两个单向链表相交,那这两个链表都一定不存在环(错)。
18+
##### 两个单向链表之间相交可以存在环。
File renamed without changes.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /