#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TRUE 1
typedef struct data
{
char datalist[20];
struct data* Next;
}data;
data* AppendList(data* p);
data* InsertList(data* p);
data* DeleteList(data* p);
int DisplayList(data* p);
void FreeMallocList(data* p);
char MenuData();
int main()
{
data* head = (data*)malloc(sizeof(data));
data* tail = head;
head->Next = NULL;
while(TRUE)
{
switch (MenuData())
{
case '1':
tail = AppendList(tail);
break;
case '2':
head = InsertList(head);
break;
case '3':
head = DeleteList(head);
break;
case '4':
DisplayList(head);
getchar(); break;
case '0':
FreeMallocList(head);
return;
default:
puts("\t 없는 메뉴 \a \a \a");
}
}
return 0;
}
char MenuData()
{
char number;
system("cls");
puts("*** 링크드 리스트 ***");
puts("*** 1.추가 리스트 ***");
puts("*** 2.삽입 리스트 ***");
puts("*** 3.삭제 리스트 ***");
puts("*** 4.출력 리스트 ***");
puts("*** 0.종료 리스트 ***");
puts("*********************");
printf("번호 선택[ ]\b\b\b");
fflush(stdin);
number = getchar();
return number;
}
data* AppendList(data* p)
{
printf("알파뱃을 입력하세요 : ");
fflush(stdin);
gets(p->datalist);
p->Next = (data*)malloc(sizeof(data));
p = p->Next;
p->Next = NULL;
return p;
}
int DisplayList(data* p)
{
int i = 1;
puts("\t ------------");
puts("\t 번호 알파뱃 ");
puts("\t ------------");
while (p->Next !=NULL)
{
printf("\t = %8s \n",i++,p->datalist);
p = p->Next;
}
puts("\t -----------------");
puts("\t 아무키나 누르세요");
getchar();
return i-1;
}
data* InsertList(data* p)
{
int pos,number;
data* item;
data* start = p;
item = (data*)malloc(sizeof(data));
number = DisplayList(p);
do{
printf("=> 삽입할 위치는 : ");
scanf("%d",&pos);
}while (pos<1 || pos>number);
printf("알파뱃을 입력하세요 : ");
fflush(stdin);
gets(item->datalist);
if (pos == 1)
{
item->Next = p;
start = item;
}
else
{
int i;
for(i=1; i<pos -1; i++)
{
p = p->Next;
}
item->Next = p ->Next;
p->Next = item;
}
return start;
}
data* DeleteList(data* p)
{
int pos, number;
data* start = p;
number = DisplayList(p);
do{
printf("=> 삭제할 번호는 : ");
scanf("%d",&pos);
}while (pos<1 || pos>number);
if (pos == 1)
{
start = p->Next;
free(p);
}
else
{
int i;
data* tmp;
for(i=1; i<pos -1; i++)
{
p = p->Next;
}
tmp = p->Next;
p ->Next = p->Next->Next;
free(tmp);
}
return start;
}
void FreeMallocList(data* p)
{
data* tmp = p;
while(p != NULL)
{
tmp = p->Next;
free(p);
p = tmp;
}
puts("종료되엇습니다.");
}
자료구조론 과제인데 연결리스트에서 대문자 소문자를 구분하는 프로그램을 짜라고하는데
인터넷에서 짜집기해서 만들어본건데 저건 대문자 소문자 구분없이 그냥 다 리스트에 들어가는데
저기서 대문자랑 소문자를 구분해서 리스트에 들어갈수있게 하는법좀 알려주세요 ㅠㅠ
자료구조는 코드 가져오지말고 맨땅에 시작해보는걸 추천, 처음하면 당연히 오래걸리겠지만