原创代码,转载需注明。
题目描述:
请你定义一个链表,可以对链表进行“在某个元素之前插入一些元素”、“删除某个位置的元素”、“查找某元素”、“获取某个位置的元素”、“遍历输出所有元素”、“求链表的长度”等操作。键盘输入一些命令,可以执行上述操作。本题中,链表元素为整数,链表的第一个元素位置为 1,链表的最大长度为20。
--------------------------------------------------------------------------------
输入样例:
I
2
1 1
2 2
S 2
D 1
I
2
1 3
2 4
G 2
L
V
E
--------------------------------------------------------------------------------
输出样例:
2
1
4
3
3
4
2
--------------------------------------------------------------------------------
输入描述:
各个命令以及相关数据的输入格式如下:
在某个位置之前插入操作的命令:I,接下来的一行是插入的组数n,下面是n行数据,每行数据有两个值,分别代表插入位置与插入的元素值
查找某个元素:S x,x是要查找的元素值
获取某个位置的元素:G i,i是需要获取的元素位置
删除某个位置的元素:D i,i是被删除的元素位置
求链表的长度:L
遍历输出所有元素:V
当输入的命令为E时,程序结束。
--------------------------------------------------------------------------------
输出描述:
当输入的命令为S时,输出要查找元素的位置,如果没找到,输出None
当输入的命令为G时,输出获取的元素值,如果输入的元素位置不正确,输出“位置不正确”
当输入的命令是D时,输出被删除的那个元素值,如果表空,输出“下溢”,如果输入的位置不正确,输出“位置不正确”
当输入命令是I时,如果输入的位置不正确,输出“位置不正确”
当输入的命令是L时,输出链表的长度
注意,所有的元素均占一行。
--------------------------------------------------------------------------------
程序限制:
程序可使用最大内存:10000K
程序运行最长耗时:10000MS(毫秒)
------------------------------------------------------------------------------------
时间没测试。
- /*
-
*CopyRight@sh365
-
*/
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
-
#define MAX_NODE 1024
-
-
typedef struct _NODE{
-
int val;
-
struct _NODE *pNext;
-
}NODE;
-
-
int creatLink(NODE **header)
-
{
-
*header = (NODE *)malloc(sizeof(NODE));
-
-
if (NULL == *header) {
-
return -1;
-
} else {
-
(*header)->val = 0; /*header's val will be used for count the node numbers*/
-
(*header)->pNext = NULL;
-
return 0;
-
}
-
}
-
-
int insertNode(NODE *header, int position, int val)
-
{
-
NODE *p = NULL;
-
NODE *h = header;
-
int i = 0;
-
-
if (position > (header->val + 1)) {
-
return -1;
-
}
-
-
p = (NODE *)malloc(sizeof(NODE));
-
if (NULL == p) {
-
return -1;
-
}
-
-
p->val = val;
-
p->pNext = NULL;
-
-
for (i=1; i<position; i++) {
-
h = h->pNext;
-
}
-
p->pNext = h->pNext;
-
h->pNext = p;
-
header->val += 1;
-
-
return 0;
-
}
-
-
int deleteNode(NODE *header, int position)
-
{
-
NODE *p = NULL;
-
NODE *h = header;
-
int i = 0;
-
-
if (position > (header->val + 1)) {
-
return -1;
-
}
-
-
for (i=1; i<position; i++) {
-
h = h->pNext;
-
}
-
p = h->pNext;
-
h->pNext = p->pNext;
-
free(p);
-
p = NULL;
-
header->val -= 1;
-
-
return 0;
-
-
}
-
-
int searchNode(NODE *header, int val)
-
{
-
NODE *h = header->pNext;
-
int i = 0;
-
-
for (i=0; i<header->val; i++) {
-
if (h->val == val) {
-
fprintf(stderr, "%d\n", i+1);
-
}
-
h = h->pNext;
-
}
-
-
return 0;
-
}
-
-
int getNode(NODE *header, int position)
-
{
-
NODE *h = header;
-
int i = 0;
-
-
if (position > header->val) {
-
return -1;
-
}
-
-
for (i=0; i<position; i++) {
-
h = h->pNext;
-
}
-
fprintf(stderr, "%d\n", h->val);
-
-
return 0;
-
-
-
}
-
-
int ergodiLink(NODE *header)
-
{
-
NODE *h = header->pNext;
-
int i = 0;
-
-
for (i=1; i<=header->val; i++) {
-
fprintf(stderr, "%d %d\n", i, h->val);
-
h = h->pNext;
-
}
-
-
return 0;
-
}
-
-
int getLinkLen(NODE *header)
-
{
-
return header->val;
-
}
-
-
int deleteLink(NODE *header)
-
{
-
/*delete the link and free the node space*/
-
return 0;
-
}
-
-
/*
-
*CopyRight-@sh365
-
*/
-
#define N 128
-
int main(int argc, char *argv[])
-
{
-
NODE *header = NULL;
-
int ret = 0;
-
int cnt = 0;
-
int val1 = 0;
-
int val2 = 0;
-
int quit = 0;
-
char comd_data[N+1];
-
-
ret = creatLink(&header);
-
if (-1 == ret) {
-
fprintf(stderr, "createLink error, exit\n");
-
exit(-1);
-
}
-
-
quit = 0;
-
while (!quit) {
-
fflush(stdin);
-
fgets(comd_data, N, stdin);
-
comd_data[N] = '\0';
-
-
switch(comd_data[0]){
-
case 'i':
-
case 'I':
-
fscanf(stdin, "%d", &cnt);
-
while (cnt-- > 0) {
-
fflush(stdin);
-
fscanf(stdin, "%d %d", &val1, &val2);
-
ret = insertNode(header, val1, val2);
-
if (-1 == ret) {
-
fprintf(stderr, "Insert Node to link error. out ot memery or illegal position.\n");
-
}
-
}
-
fgets(comd_data, N, stdin);/* delete the last \n*/
-
break;
-
-
case 's':
-
case 'S':
-
ret = searchNode(header, atoi(comd_data+2));
-
break;
-
-
case 'g':
-
case 'G':
-
ret = getNode(header, atoi(comd_data+2));
-
break;
-
-
case 'd':
-
case 'D':
-
ret = deleteNode(header, atoi(comd_data+2));
-
break;
-
-
case 'l':
-
case 'L':
-
fprintf(stderr, "%d\n", getLinkLen(header));
-
break;
-
-
case 'v':
-
case 'V':
-
ret = ergodiLink(header);
-
if (-1 == ret) {
-
fprintf(stderr, "view the link error.\n");
-
}
-
break;
-
-
case 'q':
-
case 'Q':
-
ret = deleteLink(header);
-
quit = 1;
-
break;
-
-
default:
-
break;
-
}
-
}
-
-
printf("End of main()\n");
-
return 0;
-
}
阅读(2055) | 评论(0) | 转发(0) |