Автор работы: Пользователь скрыл имя, 04 Декабря 2010 в 10:44, Не определен
Курсовой проект
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
КУЙБЫШЕВСКИЙ
ФИЛИАЛ
По дисциплине: Программирование
На тему:
« Разработка линейного однонаправленного
списка»
Выполнил студент
группы ВТК-281
Киселёв С.А.
.
_______________
(подпись, дата)
Проверил:
Бычков
М.И.
Куйбышев 2010
Задание:
Разработать программу реализующая следующие элементы списка:
Вставка, удаление,
вывод на экран, чтение из файла, удаление
последнего элемента и удаление всех
элементов списка, осуществляет выход
из программы.
Структурное
и функциональное описание программы:
//----------------------------
#include <iostream> // Стандартные потоки ввода-вывода:
// ios,istream,ostream,iostream
#include <conio>
#include <windows>
#include <stdio>
#include <stdlib>
#include <fstream>
// Файловые потоки ввода-вывода:
//------------------------
void rus(char *str)
{
char buf[100];
CharToOem(str,buf);
cout<<buf;
return;
}
//------------------------
int menu()
{int n;
rus(" Меню ");cout<<"\n";
rus("
rus(" 1 - Вставка ");cout<<"\n";
rus(" 2 - Удаление ");cout<<"\n";
rus(" 3 - Вывод на экран ");cout<<"\n";
rus(" 4 - Сохранение ");cout<<"\n";
rus(" 5 - Чтение");cout<<"\n";
rus("
6 - Удаление всего списка");cout<<
rus(" 0 - Выход ");cout<<"\n";
rus("=========================
rus(" Введите пункт меню ");cout<<"\n";
cin>>n; return n;}
// ввод с клавиатуры
//----------------------------
struct node{char x[15]; node *next;};
node *un=NULL; //создаём указатели на начало списка
node *uk=un; //создаём указатель на конец списка
node *r,*pre; //ещё 2 указателя
int count;
//----------------------------
void dellist(node *p)
// функция удаления
{
while(p){delete p; p=p->next;
}
uk=un;
}
//----------------------------
void delet(node*p)
{
node *h=p;
if(p==uk)
{
uk=p->next;delete h;
}
else
{
node *f=p->next;
p->next=(p->next)->next;
delete f;
}
}
//----------------------------
void save(node *p)
{
ofstream out("a.txt");
while(p)
{ out<<p->x<<"\n";
p=p->next;
}
rus("СОХРАНЕНО!!!"); cout<<"\n";
}
//-------------------------
void show(node *z){while(z){cout<<z->x<<"____
//--------------------------
node* insert(node *p)
{
node *q=new node;
rus("Введите значение \n");
textcolor(RED);
rus ("!!!не более 15 символов!!!\n\n");
gotoxy(1.5,wherey());
cin>>q->x; q->next=p;
return q;
}
//--------------------------
node* insert(node *p, char* str)
{
node *q=new node;
strcpy(q->x, str); //функция копирования
q->next=p;
return q; // функция возвращения переменной
}
int GetCountEl(node *p)
{
int n = 0;
while(p) //цикл с предусловием
{
n++;
p=p->next;
}
return n;
}
char* getEl(const int &num)
{
if(num < count) // структура (вид – ветвление)
{
node *p = uk;
for(int i=0; i<num; i++)
p = p->next;
return p->x;
}
else return 0; // иначе возвращается 0
}
void exchange(const int &dpos, const int &spos)
{
if((dpos<count)&&(spos<count))
{
int i;
char* temp;
temp = new char[15];
node *dest = uk;
node *source = uk;
for(i=0;i<dpos;i++
for(i=0;i<spos;i++
strcpy(temp, source->x);
strcpy(source->x, dest->x);
strcpy(dest->x, temp);
}
}
//--------------Загрузка------
loading()
{
char *str;
str = new char[15];
ifstream inf("a.txt");
if (!inf)
{
rus("Ошибка при открытии файла!\n\n\n");
} else
{
while (!inf.eof())
{
inf.getline(str,15);
if (strcmp("",str)) uk = insert(uk, str);
}
rus("Данные успешно загружены!
}
}
//-------------------------
int main()
{ int n=1;
while(n){char x[15];
n=menu();
switch(n)
{
case 1:clrscr();
cin>>x; uk=insert(uk,x);break;
case 2:clrscr();delet(uk);break;
case 3:clrscr();show(uk);break;
case 4:clrscr();save(uk);break;
case 5:clrscr();loading();break;
case 6:clrscr();dellist(uk);break;
case 0:clrscr();exit(0);
}
}
getch();
}
Схема
Вывод: эта программа выполняет ввод данных с клавиатуры, сохранение в файл и чтение из него; удаление элементов или всего списка, осуществляет просмотр и выход из программы, то есть она выделяет динамическую память для ввода данных с клавиатуры, сохраняет данные в файл. Можно загрузить данные из файла. Редактирует список с помощью удаления элемента списка, а так же возможно удалить список полностью и начать заполнение списка заново.
Информация о работе Разработка линейного однонаправленного списка